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 ...
随机推荐
- uva 133 The Dole Queue 双向约瑟夫环 模拟实现
双向约瑟夫环. 数据规模只有20,模拟掉了.(其实公式我还是不太会推,有空得看看) 值得注意的是两个方向找值不是找到一个去掉一个,而是找到后同时去掉. 还有输出也很坑爹! 在这里不得不抱怨下Uva的o ...
- Update DN with Procedure
Update DN )) LANGUAGE SQL MODIFIES SQL DATA BEGIN -- Step 1 UPDATE DNRITM A SET (DNITTQTY, DNIREQTY) ...
- linux云计算集群架构学习笔记:用户管理和root用户密码重置
RHEL7用户管理 本节所讲内容: 用户和组的相关配置文件 管理用户和组 RHEL7破解root密码 与windows 相比 LINUX中的用户和账号的作用是一样的. 都是基于用户对访问的资源做控制, ...
- 安装Laravel之坎坷记述
写这篇文章记录以及分享我安装Laravel框架的一些经验 过程如下: 1.按照官方的描述,第一步是先安装composer来管理依赖=>composer下载传送门 下载之后点击安装,按照提示它需要 ...
- 一些网摘的hpc材料
source from: https://computing.llnl.gov Factors determines a large-scale program's performance 4 ...
- 【策略】UVa 11389 - The Bus Driver Problem
题意: 有司机,下午路线,晚上路线各n个.给每个司机恰好分配一个下午路线和晚上路线.给出行驶每条路线的时间,如果司机开车时间超过d,则要付加班费d×r.问如何分配路线才能使加班费最少. 虽然代码看起来 ...
- 最长非降/下降子序列问题(DP)(待续...)
注意:抽象成以下描述即为最长非降/下降子序列问题(一维状态) 问题描述:在一个无序的序列a1,a2,a3,a4…an里,找到一个最长的序列满足:(不要求连续) ai<=aj<=ak…< ...
- saltstack实战4--综合练习1
规范配置管理 实际工作中可能会有现网环境,基线环境,开发环境. 需要使用saltstack统一管理.机器多了,业务多了,可能配置文件存放的会比较乱,因此可以统一管理起来 我们可以再加2个目录,test ...
- JMS - 消息确认
消息确认机制 消息确认协议是保证消息传送的关键所在,同时,支持确认也是 JMS API 语义的要求.以下将分别从消息生产者.消息服务器.消息消费者的角度,来考察消息确认机制. 从消息生产者的角度考察 ...
- ActiveMQ(5.10.0) - 删除闲置的队列或主题
方法一 通过 ActiveMQ Web 控制台删除. 方法二 通过 Java 代码删除. ActiveMQConnection.destroyDestination(ActiveMQDestinati ...