DataContext和ItemSource
一对多的关系
DataContext为上下文,绑定数据源
ItemSource取上下文中的某属性,会一级一级往上找属性
一般ItemSource的绑定,绑定到Grid/DataGrid一类容器上,底下的控件到这一级找
对比
1.DataContext 一般是一个非集合性质的对象,而ItemSource 更期望数据源是集合对象
2.DataContext 是 FrameworkElement 类中定义的一个依赖属性(Dependency property),ItemsSource是 在ItemsControl 类中定义的。所有继承自FrameworkElement 的类(控件)都可以使用DataContext属性并给其赋值,但我们只能给ItemsSource赋值为集合对象
3.DataContext不能产生模板,它只能用来筛选出数据,供其它控件来绑定。而ItemsSource主要作用就是给模板提供数据
4.DataContext主要用来抓取一些子元素需要使用的数据,以保证子元素能够顺利的使用数据。ItemsSource不会用来分享数据,它只是对定义好的元素有效
举例
后台
public partial class DataContextAndItemSource : Window
{
public DataContextAndItemSource()
{
InitializeComponent();
ObservableCollection<Student> students = new ObservableCollection<Student>();
students.Add(new Student()
{
Age = 15,
Name = "吴芳",
Sex = "女"
});
students.Add(new Student()
{
Age = 16,
Name = "刘洋",
Sex = "男"
});
//给DataContextAndItemSource的DataContext赋值
DataContext = students;
}
}
前端
<!--ItemsSource绑定后台DataContext的数据-->
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" CanUserAddRows="False" IsEnabled="False">
<DataGrid.Columns>
<DataGridTextColumn Width="*" Binding="{Binding Name}" Header="名称" />
<DataGridTextColumn Width="*" Binding="{Binding Age}" Header="年龄" />
</DataGrid.Columns>
</DataGrid>
示例代码
https://github.com/zLulus/NotePractice/tree/dev3/WPF/WpfDemo/DataContextAndItemSource
DataContext和ItemSource的更多相关文章
- WPF学习笔记——DataContext 与 ItemSource
作为一个WPF新手,在ListBox控件里,我分不清 DataContext 与 ItemSource的区别. 在实践中,似乎: <ListBox x:Name="Lst" ...
- Datagrid 的 SelectItem 和 SelectValue 如何区分、DataContext 和 ItemSource 在绑定时该绑哪个?
1.selecteditem.selectedvalue.selectedvaluepath三个属性 场景: class T { public string A { get; set; } publi ...
- silverlight使用小计(先做记录后续整理)
1.Grid: a.通过获取指定行的高度和指定列的宽度来获取指定单元格的宽高 b.几种宽高默认值: 宽高(Width/Heigth):1* 最大宽高(MaxWidth/MaxHeigth):正无穷大 ...
- WPF学习目录
基本概念 数据源Source-目标Target WPF生命周期 App.xaml 依赖属性 WPF路由 线程操纵UI问题 利用属性中设置.查看DataContext/Command等 分析布局 写数据 ...
- WPF中 ItemsSource 和DataContext不同点
此段为原文翻译而来,原文地址 WPF 中 数据绑定 ItemSource和 DataContext的不同点: 1.DataContext 一般是一个非集合性质的对象,而ItemSource 更期望数据 ...
- LinqToDB 源码分析——DataContext类
LinqToDB框架是一个轻量级的ORM框架.当然,功能上来讲一定比不上Entity Framework的强大.但是在使用上总让笔者感觉有一点Entity Framework的影子.笔者想过可能的原因 ...
- SilverLight CheckBox 控件 DataContext属性与DataContextChanged事件
当CheckBox对象创建时,会触发一次DataContextChanged事件,默认值待定,销毁时不会触发,代码修改DataContext时也会触发
- EF6 如何判断DataContext有修改,以及如何放弃修改
如何判断DataContext有修改: EF6的 using (var db = new Model1()) { if (db.ChangeTracker.HasChanges()) { Cons ...
- EF6 Create Different DataContext on runtime(运行时改变连接字符串)
引言 在使用EF时,有时我们需要在程序运行过程中动态更改EF的连接字符串,但不幸的时EF是否对 ConfigurationManager.RefreshSection("xxx" ...
随机推荐
- 单选框radio改变事件详解(用的jquery的radio的change事件)
单选框radio改变事件详解(用的jquery的radio的change事件) 一.总结 1.用的jquery的radio的change事件:当元素的值发生改变时,会发生 change 事件,radi ...
- thinkphp3.1 发送email
//*********************发送邮件************************** Vendor('email'); //******************** 配置信息 * ...
- c#List泛型数据扩展,把List<>型数据格式化成List<SelectListItem>,用来作dropdownlist的数据
代码例如以下 public static List<SelectListItem> CreateSelect<T>(this IList<T> t, string ...
- c3p0 xml配置文件模版
<c3p0-config> <default-config> <property name="driverClass">com.mysql.jd ...
- 诊断并解决CentOS SSH连接慢的方法
诊断并解决CentOS SSH连接慢的方法: http://os.51cto.com/art/201507/484743.htm
- [React Router v4] Redirect to Another Page
Overriding a browser's current location without breaking the back button or causing an infinite redi ...
- Passive DNS
http://blog.csdn.net/cnbird2008/article/details/17250707 http://netsecurity.51cto.com/art/201510/494 ...
- iOS开发系列之三 - UITextField 使用方法小结
// 初始化输入框并设置位置和大小 UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 100, 30 ...
- fatal error: expat.h: No such file or directory
在CentOS7最小安装版下,编译安装apr-util时报错: fatal error: expat.h: No such file or directory 解决办法:yum install exp ...
- mysql-实现行号
目前mysql不支持像oracle一样rownum,在网上也查找了好多,各种写法,自己进行了总结,实现方法如下 新建表: userid salay zhangsan 10000 lisi 12000 ...