绑定到ViewModel属性而不是使用DataContext是一种将ViewModel连接到视图的有效方法吗?

时间:2018-03-21 09:06:54

标签: .net wpf

我在WPF中读到的关于MVVM的大部分内容都谈到了通过以某种方式将视图的DataContext设置为视图模型的实例来将视图连接到视图模型。我不喜欢使用DataContext,因为它没有输入,因此intellisense不起作用。

我正在考虑使用一种方法,其中视图具有名为ViewModel的属性,该属性设置为属性的实例。由于此属性具有特定类型,因此我可以像这样

绑定到视图模型的属性
<TextBlock Text="{Binding Path=ViewModel.Property1, ElementName=_viewWindow}"/>

其中_viewWindow是应用于视图类的名称(例如,可以是Window或UserControl)。虽然这比通过DataContext绑定更冗长,但它具有intellisense可以工作的优势。

视图模型将实现INotifyPropertyChanged。

这是一种有效的方法吗?在我读过的关于MVVM的任何内容中,我都没有看到任何对该方法的引用,但这似乎是一个合理的想法。

除了较短的绑定语法之外,使用DataContext还有其他优点吗?

我在另一个答案中看到的一件事是添加了一个将DataContext强制转换为视图模型类型的属性。

1 个答案:

答案 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;
    }
}