千万不要认为WPF中的数据绑定会很复杂,尽管它的确比Winform程序灵活多了,但其本质是不变的,特别是ComboBox控件,我们知道在Winform中对该控件的有两个专为数据绑定而设定的属性——DisplayMenber和ValueMenber,分别绑定用于显示和用于存放用户选择值两个字段,最典型的应用类似于key-value形式的数据字段,如学生表中的学号(ID)和学生姓名。

其实,在WPF中原理都是一样的,来,我们一起动手玩玩。

如何新建应用程序就不用介绍了,省略33个字。

在窗口中拖放一个ComboBox控件和一个按钮,按钮用来检测所选择的值。

切换到代码视图,定义一个Employee类和一个列表。

  1. public class Employee
  2. {
  3. public string Name{set;get;}
  4. public int EmpID{ set;get; }
  5. }
  6. public class EmployeeArr : ObservableCollection<Employee>
  7. {
  8. public EmployeeArr()
  9. {
  10. this.Add(new Employee { EmpID = 1, Name = "林鸟" });
  11. this.Add(new Employee { EmpID = 2, Name = "小胡" });
  12. this.Add(new Employee { EmpID = 3, Name = "小字" });
  13. this.Add(new Employee { EmpID = 4, Name = "小牛X" });
  14. this.Add(new Employee { EmpID = 5, Name = "王狗" });
  15. }
  16. }

然后在XAML中加入资源列表中

  1. <Window
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. x:Class="ComboBox_Binding_sample.MainWindow"
  5. x:Name="Window"
  6. Title="MainWindow"
  7. Width="200" Height="120"
  8. xmlns:c="clr-namespace:ComboBox_Binding_sample">
  9. <Window.Resources>
  10. <c:EmployeeArr x:Key="EmpCols"/>
  11. </Window.Resources>
  12. .......
  13. </Window>

然后,把ComboBox绑定到资源中的集合。

  1. <ComboBox x:Name="cmb" Margin="8,8,8,7.04" ItemsSource="{StaticResource EmpCols}"
  2. DisplayMemberPath="Name"
  3. SelectedValuePath="EmpID"/>
  4. <Button Margin="28,6,28,6" Content="显示选定的值" Grid.Row="1"
  5. Click="Button_Click"/>

最后完成按钮的单击事件

  1. private void Button_Click(object sender, RoutedEventArgs e)
  2. {
  3. if (this.cmb.SelectedIndex != -1)
  4. {
  5. MessageBox.Show("你选择的员工编号为:\n" +
  6. cmb.SelectedValue);
  7. }
  8. }

运行一下就能得到效果了。

前文中刚讨论完依赖项属性,我们不妨这里也用上它的实时更新功能。

  1. <Window x:Class="ComboBox_Binding_sample.W02"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. Title="W02" Height="130" Width="270"
  5. xmlns:c="clr-namespace:ComboBox_Binding_sample">
  6. <Window.Resources>
  7. <c:EmployeeArr x:Key="ec"/>
  8. </Window.Resources>
  9. <Grid>
  10. <Grid.RowDefinitions>
  11. <RowDefinition Height="*"/>
  12. <RowDefinition Height="*"/>
  13. </Grid.RowDefinitions>
  14. <ComboBox x:Name="cmb" Grid.Row="0" Margin="10,8,10,8" ItemsSource="{StaticResource ec}"
  15. DisplayMemberPath="Name" SelectedValuePath="EmpID"/>
  16. <TextBlock Grid.Row="1" VerticalAlignment="Center" FontSize="18"
  17. HorizontalAlignment="Center"
  18. Text="{Binding ElementName=cmb,Path=SelectedValue}"/>
  19. </Grid>
  20. </Window>

这样,只要我们选择的项改变,文本块中就会实时显示员工ID。

继续聊WPF——获取ComboBox中绑定的值的更多相关文章

  1. wpf 获取datagrid中模板中控件

    //获取name为datagrid中第三列第一行模板的控件 FrameworkElement item = dataGrid.Columns[].GetCellContent(dataGrid.Ite ...

  2. WPF窗体视图中绑定Resources文件中字符串时,抛出:System.Windows.Markup.StaticExtension

    问题描述: 在Resources.resx定义了一个静态字符串字段Title,并在WPF窗体视图中绑定为窗体的标题: Title="{x:Static local:Resources.Tit ...

  3. WPF 在事件中绑定命令(不可以在模版中绑定命令)

    其实这也不属于MVVMLight系列中的东东了,没兴趣的朋友可以跳过这篇文章,本文主要介绍如何在WPF中实现将命令绑定到事件中. 上一篇中我们介绍了MVVMLight中的命令的用法,那么仅仅知道命令是 ...

  4. WPF 在事件中绑定命令

    导航:MVVMLight系列文章目录:<关于 MVVMLight 设计模式系列> 其实这也不属于MVVMLight系列中的东东了,没兴趣的朋友可以跳过这篇文章,本文主要介绍如何在WPF中实 ...

  5. 关于WPF的ComboBox中Items太多而导致加载过慢的问题

    原文:关于WPF的ComboBox中Items太多而导致加载过慢的问题 [WFP疑难]关于WPF的ComboBox中Items太多而导致加载过慢的问题                          ...

  6. WPF 获取 ListView DataTemplate 中控件值

    原文:WPF 获取 ListView DataTemplate 中控件值 版权声明:本文为博主原创文章,未经博主允许可以随意转载 https://blog.csdn.net/songqingwei19 ...

  7. jsp页面使用el 按key获取map中的对应值

    jsp页面使用el 按key获取map中的对应值 转自:<jsp页面使用el 按key获取map中的对应值>地址:http://blog.csdn.net/baple/article/de ...

  8. 给定桩号获取纵断面中的高程值(c# for civil3d)

    通过civil3d提供的api,也就是纵断面Profile类提供的方法---public double ElevationAt(double station),就可以很轻松的获取纵断面对象某桩号处的高 ...

  9. 在kindeditor 获取textarea 中 输入的值

    要在kindeditor 获取textarea 中 输入的值 必须在kindeditor创建的时候添加下面红色字体的代码     kindeditor创建代码如下: var editor;KindEd ...

随机推荐

  1. vue-cli3 vue.config.js配置

    module.exports = { // 基本路径 baseUrl: '', // 输出文件目录 outputDir: 'dist', // eslint-loader 是否在保存的时候检查 lin ...

  2. 【python接口自动化】获取根目录

    将该方法放在根目录下面,在其他类中直接import 该方法. import os def getRootPath(): rootPath = os.path.dirname(os.path.abspa ...

  3. docker 镜像阿里加速器

    1.登录 https://cr.console.aliyun.com/#/imageList 2.点击加速器tab,获取自己的加速器地址,然后执行黑框内的命令. .sudo mkdir -p /etc ...

  4. 在 POSIX 线程编程中避免内存泄漏

    检测和避免 POSIX 线程内存泄漏的技巧 POSIX 线程(pthread)编程定义了一套标准的 C 编程语言类型.函数和常量 — 且 pthreads 提供了一种强大的线程管理工具.要充分使用 p ...

  5. Lua中闭包详解 来自RingOfTheC[ring.of.the.c@gmail.com]

    这些东西是平时遇到的, 觉得有一定的价值, 所以记录下来, 以后遇到类似的问题可以查阅, 同时分享出来也能方便需要的人, 转载请注明来自RingOfTheC[ring.of.the.c@gmail.c ...

  6. url相关

    #测试网址: http://localhost/blog/testurl.php?id=5 //获取域名或主机地址 echo$_SERVER['HTTP_HOST']."<br> ...

  7. Django的日志中关闭elasticsearch模块的日志

    今天用python的日志模块,为Django项目配置了日志,运行的时候发现日志在疯狂的涨,检查后发现竟然是elasticsearch的日志,但是我没有打这个日志啊,根据日志提供的文件位置,我在elas ...

  8. js-图片img转base64格式

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. [Bzoj4942][Noi2017]整数(线段树)

    4942: [Noi2017]整数 Time Limit: 50 Sec  Memory Limit: 512 MBSubmit: 363  Solved: 237[Submit][Status][D ...

  10. ios 使用 resignFirstResponder 无法hide键盘

    - (BOOL)disablesAutomaticKeyboardDismissal {    return NO;}