Microsoft Sample和WPF Rules之间不明确

时间:2013-10-17 15:02:00

标签: wpf mvvm

我认为我们应该没有MVVM模式中View到ViewModel的引用。但只是从code.msdn.microsoft看到一个MVVM示例,其中ViewModel实现了新窗口并显示它;

通过使用MVVM-Light工具包,您可以使用Messenger来调用或打开新窗口,并且仍然保持View和ViewModel彼此分离。在ViewModel中引用View是否正确?或者它是错的;

您是否建议直接从ViewModel调用Views来进行大型(或中型)项目?

http://code.msdn.microsoft.com/windowsdesktop/Easy-MVVM-Examples-fb8c409f

2 个答案:

答案 0 :(得分:2)

YAGNI

努力程度和复杂程度。

MVVM只是一种模式。您不必遵循的模式。我为自己编写的任何小工具都只使用模型,视图模型和视图。视图模型通过INotifyPropertyChanged公开视图所需的所有属性。使用ViewModel.FromModel(model)语法将数据从viewmodel来回移动到模型。我不绑定我的模特。我只在保存/加载数据时使用该模型;我不挂在上面。我的视图是使用dataTemplates和dataTemplateSelectors生成的。如果我有一个应该更改布局的属性,我会在viewmodel上公开它并使用一个选择器。否则,我为每个viewmodel对象都有一个datatemplate。它只是有效。

我将其称为MVVM的一种形式,即使它没有任何工具包或Microsoft描述的确切MVVM模式。

我个人会实现一项服务来从viewmodel驱动命令来生成新视图并连接viewmodel。但那是因为我有MVC经验,我认为使用MVC模式生成视图更容易,而桌面视图使用MVVM模式更好。

我的所有观点都由contentControls组成。设置内容是设置viewmodel。

所以我使用混合动力。

如果您的软件不是那么复杂而不需要完整的Microsoft认可的MVVM模式,那么为什么要创建开销代码IMO。 YAGNI。

答案 1 :(得分:1)

IMO,从ViewModel到View的强引用有两个问题:

  • 它破坏了ViewModel代码的可测试性。这意味着您将无法轻松地对您的代码进行单元测试,如果您这样做,则必须考虑Dispatcher问题等。
  • 它使ViewModel依赖于WPF程序集和类型。这意味着您无法将ViewModel复制并粘贴到其他应用程序或平台(如Xamarin.Android等)中

如果这些对你来说都不重要,我认为你没有理由不这样做。不这样做会在代码中产生额外的开销,因为必须实现WindowManager和诸如此类的东西。