千万不要认为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. 【前端学习笔记】2015-09-01 附 split()方法、readyState

    1.split():作用对象是一个字符串或者字符串对象,会要求设置两个参数(分割点(separator),分割出来的数量(number)),ps:1."2:3:4:5".split ...

  2. toUpperCase与toLowerCase

    public String toLowerCase()此方法返回的字符串转换为小写. public String toUpperCase()此方法返回的字符串转换为大写. 注:支队英文字符有效,其他字 ...

  3. C# DataSet与DataTable的区别和用法

    DataSet是数据集,DataTable是数据表,DataSet存储多个DataTable.DataSet和DataTable像是专门存储数据的一个容器,在你查询数据库得到一些结果时可以存在里面. ...

  4. .NET中JSON的序列化和反序列化的几种方式

    一.什么是JSON JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集 ...

  5. codevs贪吃的九头龙

    传说中的九头龙是一种特别贪吃的动物.虽然名字叫“九头龙”,但这只是说它出生的时候有九个头,而在成长的过程中,它有时会长出很多的新头,头的总数会远大于九,当然也会有旧头因衰老而自己脱落.有一天,有M 个 ...

  6. mc

    Description 小C在MC里有n个牧场,自西向东呈一字形排列(自西向东用1-n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站, 每个牧场上只能建立一个控制站,每个控 ...

  7. PyTorch学习笔记之Variable_and_function_cat

    application 1 from torch.autograd import Variable import torch b = Variable(torch.FloatTensor([64, 1 ...

  8. javascript --- 对象之间的继承

    了解这一章之前,先把我们之前讲到的以构造函数创建对象为前提的继承抛到一边. 首先,我们先用一个var o = {}创建一个没有任何属性的空对象作为我们的‘画板’,然互在逐步向这个画板里添加属性,和方法 ...

  9. Android 存储(本地存储 SD卡存储 SharedPreference SQLite ContentProvider)

    本文出自:http://blog.csdn.net/dt235201314/article/details/73176149 源码下载欢迎Star(updating):https://github.c ...

  10. 深入理解vue路由的使用

    vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用.vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来.传统的页面应 ...