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-我们可以使用两种方法将数据上下文设置为视图,一种选择是在代码隐藏文件中设置上下文,但这与视图紧密耦合并且它不是一个好的方法,我建议下面的选项,它的与观点松散耦合