WPF的DataContext问题
我问过它如何使用INotifyPropertyChanged接口( WPF INotifyPropertyChanged如何工作? ),它要求我将XAML的DataContext连接到INotifyPropertyChangedinheritance实例,如下所示。
MainViewModel model = new MainViewModel(); this.DataContext = model;
我还建议对每个XMAL使用的DataContext发表评论( http://joshsmithonwpf.wordpress.com/2009/10/24/xaml-tip-datacontext-comment/ )。
当我有多个XAML文件,并且当我想将DataContext链接到不同的ViewModel时,我想我需要让每个XAML.CS文件包含这个代码(模型因每个xaml.cs而异): this.DataContext = model;
。
- 它是否正确?
- 如何在XAML文件中执行相同的操作?
- 这个DataContext背后的魔力是什么? 我的意思是,DataContext是如何工作的?
-
是的,这是正确的,据我所知,因为这是非常重复的一些MVVM框架为您做这个链接。
-
在XAML中:
-
它支持Path相对于DataContext的短绑定,例如
{Binding Name}
绑定到DataContext.Name
。 它也是遗传的,可能很有用。
如果还没有,请阅读数据绑定概述 。
DataContext
实际上是WPF中绑定系统的主要关键之一。 当您设计View(XAML)时,您正在设置数据绑定,但这些都是通过名称 (有效地,作为字符串)完成的。 视觉层次结构中“最近的” DataContext
是WPF用于查找匹配属性(按名称)并连接绑定的对象。
将评论放在适当位置的建议很好 – 它有帮助,因为所选的名称实际上取决于ViewModel( DataContext
),因此View的XAML文件实际上与特定类型的DataContext
。
另请注意,除了在代码中设置DataContext之外,还有其他可用于连接DataContext的方法,包括使用定位器,DataTemplates,直接在XAML中设置它等。
1 – INotifyPropertyChanged接口更新UI的属性更改,
公共事件PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(info)); } }
2-我们可以使用两种方法将数据上下文设置为视图,一种选择是在代码隐藏文件中设置上下文,但这与视图紧密耦合并且它不是一个好的方法,我建议下面的选项,它的与观点松散耦合