在MVVM中绑定DataContext的策略是什么?

Edw*_*uay 6 silverlight wpf conceptual mvvm

这两个1小时的视频逐步展示了如何使用MVVM模式在Silverlight和WPF中构建简单的测验应用程序:

在Silverlight中实现Model-View-ViewModel

在WPF中实现Model-View-ViewModel

令我惊讶的是,它们在结构上多么不同,例如,它们如何使用DataBinding:

在Silverlight方法中,我们View的DataContext设置为ViewModel中的ObservableCollection:

<views:QuestionView x:Name="QuestionDataView" />

QuestionViewModel qdata = new QuestionViewModel();
qdata.FetchQuestions();
QuestionDataView.DataContext = qdata.Questions;
Run Code Online (Sandbox Code Playgroud)

在WPF方法中,我们Window的DataContext设置为ViewModel本身.

<view:QuizView Margin="4" />

base.DataContext = new QuizViewModel(Quiz.Create());
Run Code Online (Sandbox Code Playgroud)

看起来我看到的每个MVVM示例都在一个稍微新的变体中进行DataContext绑定,并且我试图确定" 如何在MVVM模式中完成DataContext绑定 ".

当你决定将DataContext绑定到某个东西时,你的头脑是什么:为什么将Window/View/ListBox /等的DataContext绑定到ObservableCollection/ModelView /等?这里有哪些优点,缺点和策略?

任何输入赞赏.

Ken*_*art 10

他们是否提到为什么不同的方法用于Silverlight?它可能只是平台的限制.

建议的方法是绝对使用视图模型本身作为视图DataContext.实际上,您应该创建视图模型并让WPF为您解析视图,而不是显式创建视图.为此,请注册DataTemplate:

<DataTemplate DataType="{x:Type local:MyViewModel}">
    <local:MyView/>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

然后你只是坚持您的视图模型实例到一个ContentControl,ItemsControl或任何和WPF会与相应的呈现它DataTemplate.这DataTemplate将有视图模型作为其DataContext凭借WPF的模板系统.