SelectedValue,SelectedValuePath,SelectedValueBinding,DisplayMemberPath讲解
无论在Winform、WPF、ASP.NET中,数据绑定是我们经常使用的一个重要技术,我们经常会把相关类动态显示绑定到UI界面中,其中有几个比较重要的属性需要大家灵活运用。
那Combox来说明有两个属性DisplayMemberPath和SelectedValuePath,前者是显示控件中每个元素Item的属性,即你想把类中的哪个属性显示出来,就用这个关键字DisplayMemberPath,而SelectedValuePath表示在combox中选中Item的值是类中的哪个属性,即每个Item的SelectedValue的值,比如一个学生类
class student
{
public int id;
public string name;
}
一般情况下ComboBox.Itemsource=StudentList设置完之后,再设置ComboBox.DisplayMemberPath="name";ComboBox.SelectedValuePath="id";
这样每个combobox的item的value就是id,但它显示出来的是name,当然类似的ListBox等也可以运用这些属性。
现在那我写过的一个小项目说明一个比较复杂的绑定,项目中有两个类Employee、Department,我们知道每位员工都有他所属的部门,没个部门都有若干的员工。


在项目中我们通过一些特定的条件进行搜索将搜索出来的Employee绑定到一个DataGrid上,我的意思是说想通过Employee表中的DepartmentId这个表示列,从Department表中查询并返回Name属性显示到DataGrid的列上去。
Employee:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace HR.Model
{
public class Employee
{
public Guid Id
{
get;
set;
} /// <summary>
/// 部门Id
/// </summary>
public Guid DepartmentId
{
get;
set;
} //剩下的暂不需要看 /// <summary>
/// 工号
/// </summary>
public string Number
{
get;
set;
} public string Name
{
get;
set;
} /// <summary>
/// 性别Id
/// </summary>
public Guid GenderId
{
get;
set;
} //因为图片如果一次性读取到Model中会非常耗内存,因此需要的时候再去单独读取,不在Model中建字段 /// <summary>
/// 出生日期
/// </summary>
public DateTime BirthDay
{
get;
set;
} /// <summary>
/// 入职日期
/// </summary>
public DateTime InDate
{
get;
set;
} /// <summary>
/// 婚姻状态Id
/// </summary>
public Guid MarriageId
{
get;
set;
} /// <summary>
/// 政治面貌Id
/// </summary>
public Guid PartyStatusId
{
get;
set;
} /// <summary>
/// 民族
/// </summary>
public string Nationality
{
get;
set;
} /// <summary>
/// 籍贯
/// </summary>
public string NativeAddr
{
get;
set;
} /// <summary>
/// 教育程度Id
/// </summary>
public Guid EducationId
{
get;
set;
} /// <summary>
/// 专业
/// </summary>
public string Major
{
get;
set;
} /// <summary>
/// 毕业院校
/// </summary>
public string School
{
get;
set;
} /// <summary>
/// 地址
/// </summary>
public string Address
{
get;
set;
} /// <summary>
/// 基本工资
/// </summary>
public int BaseSalary
{
get;
set;
} /// <summary>
/// </summary>
public string Email
{
get;
set;
} /// <summary>
/// 有效身份证号
/// </summary>
public string IdNum
{
get;
set;
} /// <summary>
/// 联系电话
/// </summary>
public string TelNum
{
get;
set;
} /// <summary>
/// 紧急联系人信息
/// </summary>
public string EmergencyContact
{
get;
set;
} /// <summary>
/// 职位
/// </summary>
public string Position
{
get;
set;
} /// <summary>
/// 合同起始时间
/// </summary>
public DateTime ContractStartDay
{
get;
set;
} /// <summary>
/// 合同到期时间
/// </summary>
public DateTime ContractEndDay
{
get;
set;
} /// <summary>
/// 简历
/// </summary>
public string Resume
{
get;
set;
} /// <summary>
/// 备注
/// </summary>
public string Remarks
{
get;
set;
} public byte[] Photo
{
get;
set;
}
}
}
Department类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace HR.Model
{
public class Department
{
public Guid Id
{
get;
set;
} public string Name
{
get;
set;
}
}
}
UI界面:

在UI界面中的代码:
<DataGridComboBoxColumn Header="部门" Width="" SelectedValueBinding="{Binding DepartmentId}" SelectedValuePath="Id"
DisplayMemberPath="Name" x:Name="columnDepartmentId"></DataGridComboBoxColumn>
这块是将DataGrid的某一个数据列(ComboxColumn类型的列),普通的DataTextColum无法完成负责的绑定。
将SelectedValueBinding绑定到DepartmentId,因为我们通过搜索返回的是Employee类型,而Employee对象中有DepartmentId属性,然后SelectedValuePath=Id表示我们是通过Id这个关键字进行搜索,搜索Department中的Id属性,然后以Name属性进行显示。
我们在窗体的Window_Loaded方法中初始化控件,把所有数据库中的Department对象绑定到控件DataGrid中的ComboxColumn中。
后台代码:

然后通过点击搜索按钮的点击事件对DataGrid控件进行再次绑定。
后台代码:
大家只看最后一句就行,即通过点击把一些搜索条件记录下来,然后进行Sql select操作,然后返回特定的Employee对象。

SelectedValue,SelectedValuePath,SelectedValueBinding,DisplayMemberPath讲解的更多相关文章
- WPF Selector、SelectIndex、SelectedValue、SelectedValuePath、SelectedItem这几兄弟你分的清楚嘛?
Selector Selector是一个抽象类,继承ItemsControl类(包含任何类型的对象(例如字符串,图像或面板)的集合),而本文的4个兄弟都是Selector类下的4个属性. Select ...
- WPF入门教程系列二十二——DataGrid示例(二)
DataGrid示例的后台代码 1) 通过Entity Framework 6.1 从数据库(本地数据库(local)/Test中的S_City表中读取城市信息数据,从S_ Province表中读取 ...
- WPF DataGrid – Dynamically updating DataGridComboBoxColumn
The Scenario I want to do a master detail like scenario where the selection in one ComboBox cell wil ...
- (WPF) MVVM: ComboBox Binding, XML 序列化
基本思路还是在View的Xmal里面绑定ViewModel的属性,虽然在View的后台代码中也可以实现binding,但是还是在Xmal里面相对的代码量要少一些. 此例子要实现的效果就是将一个List ...
- 解决IsEditable="True"的ComboBox在DataGrid中点击一次不能选中行的问题
原文:解决IsEditable="True"的ComboBox在DataGrid中点击一次不能选中行的问题 此方法很笨拙,并不推荐使用!!! 此方法很笨拙,并不推荐使用!!! 此方 ...
- Silverlight:telerik RadControls中RadGridView的一个Bug及解决办法(转载)
当RadGridView中嵌套RadComboBox,且RadGridView的高度不够出现滚动条时,上下拉动滚动条后,RadComboBox中的选中值将丢失! 如下图: 滚动条未拖动前 滚动条上下拖 ...
- MVVM模式WPF的ComboBox数据绑定,使用Dictionary作为数据源
ViewModel//属性定义 Dictionary<int, string> _selGroupList; /// <summary> /// 分组下拉列表 /// < ...
- WPF自定义选择年月控件详解
本文实例为大家分享了WPF自定义选择年月控件的具体代码,供大家参考,具体内容如下 封装了一个选择年月的控件,XAML代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- WPF ComboBox 默认选中无效
在WPF开发当中,我发现ComboBox的默认选中逻辑失效了,仔细查找后发现后台逻辑并没有出现问题. 测试后发现在XAML中,ComBoBox控件的SelectedValue属性需要写在ItemSou ...
随机推荐
- Java基础知识强化101:Java 中的 String对象真的不可变吗 ?
1. 什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对 ...
- html笔记03:表单
1.表单是用来收集用户填写的信息,可以说表单就是一个容器,里面的元素的类型可以不一样,所表示的功能也不同. 表单基本语法: <html> <head> <title> ...
- Android(java)学习笔记79:java中InetAddress类概述和使用
要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机. 在TCP/IP协议中,这个标识号就是IP地址. 那么,我们如果获取和操作I ...
- HDU 4433 locker
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4433 这是一道2012年ACM天津赛区现场赛的题目,大意是给出两串数字,求用最少的转换次数将一串(A) ...
- 浅谈 Data URI 与 BASE 64 编码
前言(废话):鼓捣 Stylish 的时候发现了这么个奇怪的代码行: Data:image/gif;BASE64,R0lGODlhEAAQAKEAAEKF9NPi/AAAAAAAACH5BAEAAAI ...
- css禁止双击dom节点被选中user-select:none
css禁止dom节点被选中: 当某个dom节点在快速重复点击的时候出现这个节点被选中,有时候其实并不希望出现这种情况,比如我们使用一个span或者a标签做为按钮dom元素的时候,快速双击这个按钮,就 ...
- MyBatis(3.2.3) - Custom ResultSet processing using ResultSetHandler
MyBatis provides great support with plenty of options for mapping the query results to JavaBeans. Bu ...
- asp.net自定义控件
回发星级控件 using System; using System.ComponentModel; using System.Web.UI; using System.Web.UI.WebContro ...
- 第一篇:groovy对DSL的语法支持
引子 我们用一段gradle的脚本做引子,理解这一段脚本与一般的groovy代码是怎么联系起来的 buildscript { repositories { jcenter() mavenLocal() ...
- (Android)View.getHeight或getWidth为0时的一些解决方案
在Android开发过程中,经常需要动态的更改View的大小,有些View的大小可能需要根据其他View的大小来设定,或者你需要得到一些View的大小来进行某项操作,但是有可能你需要在onCreate ...