在使用MVVM过去,我已经创建了每个视图作为DataTemplate
它是相应的viewmodel来处理连接它们。我刚开始使用MVVM Light,并注意到他们有ViewModelLocator
。我看过的其他几个工具包包含了一些变化,但是这会带来怎样的好处?DataTemplate
?将视图模型连接到视图的首选方法是什么?
这是连接您的视图和ViewModels的最佳做法?
在使用MVVM过去,我已经创建了每个视图作为DataTemplate
它是相应的viewmodel来处理连接它们。我刚开始使用MVVM Light,并注意到他们有ViewModelLocator
。我看过的其他几个工具包包含了一些变化,但是这会带来怎样的好处?DataTemplate
?将视图模型连接到视图的首选方法是什么?
这是连接您的视图和ViewModels的最佳做法?
有两种不同的方法,而不是一个 “正确的方式”。
ViewModelLocator
或类似的帮助是开发MVVM的“视图优先”方法。通过这个,它意味着你在设计器中开始你的View,然后构建ViewModel来匹配。逻辑上,视图通常会创建其他视图,并且ViewModel通常通过某种形式的定位器加载并填充给定的视图。消息或服务用于将适当的模型挂接到新生成的ViewModels。
这样做的好处是可以更容易地进行视觉设计,特别是在使用Blend时。
另一种方法是使用“ViewModel-First”。由此,您生成您的ViewModels,然后使用DataTemplates来填充视图。 ViewModels将编写/创建其他虚拟机,直接设置适当的模型。从程序员的角度来看,这通常是(IMO)多得多,因为事情直接起作用。然而,从设计师的角度来看,设计和工作通常更加困难,因为设计时数据更难生成等等。
这两种方法都是完全有效的,并且具有强大的优点和缺点。不同的MVVM纯粹主义者倾向于更喜欢一种方法,出于各种各样的原因 - 通常他们是从代码清洁度角度还是从设计者的角度来看待这个问题。
我看到它的方式:
DataContext
,则这可能有时会成为问题。对于(3)(如何使用ViewModelLocator):
ViewModelLocator.cs
和类型mvvmlocatorproperty
。在intellisense中选择它,然后双击Tab以使片段工作。将其更改为适当的属性。在XAML中,你会使用这样的:
<Window.DataContext>
<Binding Path="HomePage" Source="{StaticResource Locator}"/>
</Window.DataContext>
对于此属性:
public HomePageViewModel HomePage
{
get
{
return HomePageStatic;
}
}
我刚刚回答了这个问题[here](http://stackoverflow.com/questions/5462040/what-is-a-viewmodellocator-and-what-are-its-pros-cons-compared-to-datatemplates) :) – Jon 2011-03-28 16:57:01