我问过它如何与INotifyPropertyChanged接口(How does WPF INotifyPropertyChanged work?)一起使用,它要求我将XAML的DataContext连接到INotifyPropertyChanged继承实例,如下所示。
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而异):{{ 1}}。
答案 0 :(得分:2)
DataContext
实际上是WPF中绑定系统的主要关键之一。当您设计View(XAML)时,您正在设置数据绑定,但这些都是按名称完成的(实际上,作为字符串)。视觉层次结构中“最近的”DataContext
是WPF用于查找匹配属性(按名称)并连接绑定的对象。
建立评论的建议很好 - 它有帮助,因为所选的名称实际上取决于ViewModel(DataContext
),因此View的XAML文件实际上与特定类型的{{{ 1}}。
另请注意,除了在代码中设置DataContext之外,还有其他可用于连接DataContext的方法,包括使用定位器,DataTemplates,直接在XAML中设置等等。
答案 1 :(得分:1)
是的,这是正确的,据我所知,因为这是非常重复的一些MVVM框架为你做这个链接。
在XAML中:
<UserControl ...
xmlns:vm="clr-namespace:MyApp.ViewModels">
<UserControl.DataContext>
<vm:MyViewModel />
</UserControl.DataContext>
<!-- ... -->
</UserControl>
它启用了Path相对于DataContext的短绑定,例如: {Binding Name}
绑定到DataContext.Name
。它也是遗传的,可能很有用。
如果您没有,请阅读Data Binding Overview。
答案 2 :(得分:0)
1 - INotifyPropertyChanged界面更新了对UI的属性更改
公共事件PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
2-我们可以使用两种方式将数据上下文设置为视图,一种选择是在代码隐藏文件中设置上下文,但这与视图紧密耦合并且它不是一个好方法,我建议如下选项,它与视图松散耦合
<UserControl ...
xmlns:vm="clr-namespace:MyApp.ViewModels">
<UserControl.DataContext>
<vm:MyViewModel />
</UserControl.DataContext>
<!-- ... -->