千万不要认为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。

最新文章

  1. 在ubuntu14.04上部署基于Docker的Gitlab
  2. Divide and Conquer:Monthly Expense(POJ 3273)
  3. Caffe初试(一)win7_64bit+VS2013+Opencv2.4.10+CUDA6.5配置Caffe环境
  4. 如何使用VS2013对C++进行编程
  5. [ASP.NET] 下一代ASP.NET开发规范:OWIN
  6. 4 Values whose Sum is 0
  7. opengl之vsh、fsh简易介绍+cocos2dx 3.0 shader 变灰
  8. SecureCRT访问开发板linux系统
  9. Redis&#39; High Availability
  10. SQL Server高级内容之表表达式和复习
  11. 16Aspx.com源码2014年7月详细
  12. Unity-视图
  13. c 转置字符串You are a so cheap man -&gt;man cheap so a are You
  14. iOS 框架 Nimbus
  15. VMware 创建多台Linux机器并配置IP
  16. 手把手教你画一个 逼格满满圆形水波纹loadingview Android
  17. Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译
  18. QT_地图导航 源码下载
  19. ios 拉伸图片和计算文字的大小
  20. win7 64位远程连接oracle11g64位

热门文章

  1. stein法求gcd 学习笔记
  2. LeetCode OJ——Minimum Depth of Binary Tree
  3. Anaconda3中Python3.5和Python2.7共存
  4. 1076. Wifi密码 (15)【模拟】
  5. 洛谷—— P1342 请柬
  6. CodeForces - 11D A Simple Task
  7. codeforces A. In Search of an Easy Problem
  8. IntelliJ IDEA删除所有断点
  9. Android动画系列 - PropertyAnim 详解
  10. Android开发者选项——Gpu呈现模式分析