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 ...
随机推荐
- Android(java)学习笔记106-1:深入分析Java ClassLoader原理
1. 前言: Android中的动态加载机制能更好的优化我们的应用,同时实现动态的更新,这就便于我们管理我们的应用,通过插件化来减轻我们的内存以及CPU消耗,在不发布新版本的情况下能更新某些模块. 当 ...
- Flask与Ajax
这篇短文使用jquery. Flask提供一个很简单的方法来处理Ajax请求——在视图函数中用request的属性is_xhr来判断,如果是true则是异步请求. Jquery的$.getJSON() ...
- 24小时学通Linux内核--内核探索工具类
寒假闲下来了,可以尽情的做自己喜欢的事情,专心待在实验室里燥起来了,因为大二的时候接触过Linux,只是关于内核方面确实是不好懂,所以十天的时间里还是希望能够补充一下Linux内核相关知识,接下来继续 ...
- 【memset】关于memset的初始最大最小值
声明:也是摘自网上各路大神的. memset的正规用法是只能用来初始化char类型的数组的,也就是说,它只接受0x00-0xFF的赋值. 因为char是1字节,memset是按照字节赋值的,相当于把每 ...
- Windows 8.1 归档 —— Step 3 软件的选择与安装
这里我将列举出一些 Windows 8.1 下实用的软件 --运行库-- 用精简版系统或者绿色版软件时,使用软件经常遇见的情况是“由于应用程序配置不正确,应用程序未能启动”,提示缺少dll文件等.大部 ...
- 转:从零开始开发一款Android App (from 简书)
转: http://www.jianshu.com/p/a58d15ef5c8b
- 会话跟踪技术——Session
一.什么是Session Session从用户访问页面开始,到断开与网站连接为止,形成一个会话的生命周期.在会话期间,分配客户唯一的一个SessionID,用来标识当前用户,与其他用户进行区分. Se ...
- js学习笔记—转载(闭包问题)
---恢复内容开始--- 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascrip ...
- Linux 命令 - crontab: 任务调度
cron 是一个 Linux 下的定时执行工具,可以在无需人工干预的情况下运行作业.守护进程 cron 会读取 crontab 文件,根据配置在指定的时间执行任务.contab 命令用来添加.删除.显 ...
- get方法与post方法的使用
使用get方法获取页面的form内容 新建一个getform.html <html> <head> <title>Using Http Get Method< ...