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 ...
随机推荐
- gitlab备份与恢复操作方法
github私有仓库是收费的,有些代码不方便托管到外面的git仓库,因此就产生了自己搭建git服务器的需求. 好在有广大的开源人士的贡献,有了gitlab这一神器. 手动配置较多,直接用集成包: bi ...
- 关于线程池ThreadPoolExecutor使用总结
本文引用自: http://blog.chinaunix.net/uid-20577907-id-3519578.html 一.简介 线程池类为 java.util.concurrent.Thread ...
- 关于Eclipse的Save时的自定义操作
Eclipse中Save+S的时候会包含很多其他操作.例如代码格式化,自动导入或者删除jar包等等. 如果修改代码的时候不想让Eclipse做这些操作,有两种方法. 第一: 用一个文本编辑器打开这个文 ...
- python中那些双下划线开头得函数和变量--转载
Python中下划线---完全解读 Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用'from module import *'导入 __xxx__ 系统定义名字 __x ...
- C# 截图类
注意修改命名空间using System.Drawing; using System.Windows.Forms; namespace WindowsFormsApplication1 { ...
- Linux 命令 - passwd: 更改用户密码
命令格式 passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactiveda ...
- Nginx - SSI Module
SSI, for Server Side Includes, is actually a sort of server-side programming language interpreted by ...
- IIS服务器应用程序不可用的解决办法
转载:http://www.cnblogs.com/caicainiao/archive/2010/11/29/1891085.html 这个问题见了好几次,在.net下 Microsoft visu ...
- 如何获取Window
[[UIApplication sharedApplication].delegate window]
- select2 取值 赋值
项目中心引入了select2的插件.优势:可以多选.搜索,缺点:存取值不如select方便. select2 取值: <script type="text/javascript&quo ...