千万不要认为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. mac/linux自带定时任务执行crontab的使用

    1.编辑定时任务信息 sudo crontab -e #以root用户创建,也可以 -u 参数 编辑内容如下: 频率表达式分别对应为 分.时.日.周.月 LANG=zh_CN.UTF-8 */30 * ...

  2. linux监控平台搭建-cpu

    linux监控平台搭建-cpu 目前服务器的主流CPU是intel或者AMD.到底主频是什么.多核.多线程.并发.并行.超频.一级缓存.二级缓存.三级缓存.i386.x86 cpu:含有算术逻辑.控制 ...

  3. 我要好offer之 链表大总结

    单链表是一种递归结构,可以将单链表看作特殊的二叉树(我把它叫做一叉树) 单链表的定义: /** * Definition for singly-linked list. * struct ListNo ...

  4. 【kindeditor】KindEditor获取多个textarea文本框的值并判断非空

    kindeditor官网:http://kindeditor.net/demo.php 如何获取多个KindEditor中textarea文本框的值,方式很多种(带有HTML标签). var intr ...

  5. WebRTC 介绍 (转)

    google开源了WebRTC项目,网址是:http://code.google.com/p/webrtc/. WebRTC实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单 ...

  6. 35深入理解C指针之---结构体基础

    一.结构体基础 1.定义:结构体大大加强了C的数据聚合能力,可以使得不同类型的数据进行结合 2.特征: 1).结构体可以使得不同类型的数据进行结合 2).结构体可以使用内置的数据类型,包括指针 3). ...

  7. Linux spi驱动分析(二)----SPI核心(bus、device_driver和device)

    一.spi总线注册 这里所说的SPI核心,就是指/drivers/spi/目录下spi.c文件中提供给其他文件的函数,首先看下spi核心的初始化函数spi_init(void).程序如下: 点击(此处 ...

  8. AC日记——Destroying The Graph poj 2125

    Destroying The Graph Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8356   Accepted: 2 ...

  9. MX

    A mail exchanger record (MX record) is a type of resource record in the Domain Name System that spec ...

  10. VMware虚拟机直连物理网络的两种方式

    VMware虚拟机直连物理网络的两种方式   使用VMware构建虚拟机,通常虚拟机都使用NAT模式.这时,虚拟机有独立的网段.使用NAT模式,虚拟机之间数据都通过虚拟网络传输,不会影响实体机所在的实 ...