我认为我们应该没有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
答案 0 :(得分:2)
努力程度和复杂程度。
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的强引用有两个问题:
Dispatcher
问题等。如果这些对你来说都不重要,我认为你没有理由不这样做。不这样做会在代码中产生额外的开销,因为必须实现WindowManager
和诸如此类的东西。