我在WPF中读到的关于MVVM的大部分内容都谈到了通过以某种方式将视图的DataContext设置为视图模型的实例来将视图连接到视图模型。我不喜欢使用DataContext,因为它没有输入,因此intellisense不起作用。
我正在考虑使用一种方法,其中视图具有名为ViewModel的属性,该属性设置为属性的实例。由于此属性具有特定类型,因此我可以像这样
绑定到视图模型的属性<TextBlock Text="{Binding Path=ViewModel.Property1, ElementName=_viewWindow}"/>
其中_viewWindow是应用于视图类的名称(例如,可以是Window或UserControl)。虽然这比通过DataContext绑定更冗长,但它具有intellisense可以工作的优势。
视图模型将实现INotifyPropertyChanged。
这是一种有效的方法吗?在我读过的关于MVVM的任何内容中,我都没有看到任何对该方法的引用,但这似乎是一个合理的想法。
除了较短的绑定语法之外,使用DataContext还有其他优点吗?
我在另一个答案中看到的一件事是添加了一个将DataContext强制转换为视图模型类型的属性。
答案 0 :(得分:2)
如果您通过XAML设置数据上下文,智能感知将起作用。
<Window
...>
<Window.DataContext>
<MyViewModel />
</Window.DataContext>
如果您不喜欢将视图耦合到特定实现,您实际上可以使用视图模型的接口:
<Window
...>
<Window.DataContext>
<x:Type Type="IMyViewModel" />
</Window.DataContext>
然后,您需要通过后面的代码设置DataContext。
public class MyView
{
public MyView(IMyViewModel myViewModel)
{
this.DataContext = myViewModel;
}
}