2

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

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

对于大型(或中型)项目,您是否建议直接从 ViewModel 调用视图?

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

4

2 回答 2

2

雅格尼

努力程度和复杂性。

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

我称之为 MVVM 的一种形式,尽管它没有任何工具包或 Microsoft 描述的确切 MVVM 模式。

我会亲自实施一项服务来驱动来自视图模型的命令以生成新视图并连接视图模型。但那是因为我有 MVC 经验,而且我认为使用 MVC 模式生成视图更容易,而桌面视图使用 MVVM 模式效果更好。

我所有的视图都是由 contentControls 组成的。设置内容就是设置视图模型。

所以我使用混合动力车。

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

于 2013-10-17T15:20:49.720 回答
1

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

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

如果这些对你都不重要,我看不出你有什么不重要的理由。不这样做会在您的代码中产生额外的开销,因为必须实现WindowManagers 和诸如此类的东西。

于 2013-10-17T15:23:57.380 回答