【问题标题】:Ambiguous between Microsoft Sample and WPF RulesMicrosoft Sample 和 WPF 规则之间的歧义
【发布时间】:2013-10-17 15:01:59
【问题描述】:

我认为在 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

【问题讨论】:

    标签: wpf mvvm


    【解决方案1】:

    YAGNI.

    工作量和复杂程度。

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

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

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

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

    所以我使用混合动力。

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

    【讨论】:

    • 你的意思是;如果项目不是太大;您不需要完全遵循 MVVM;是的?你的意思是我什至可以在代码隐藏中实现 Button_Click(至少对于那些没有数据库事务的窗口);他们不会给单元测试带来任何问题吗?
    • 你需要在一个只有一个窗口三个控制对话框的应用程序上进行单元测试吗?最好在需要扩展应用程序时重构所需的功能。为更改数据库中的一个表的单个屏幕开发一个成熟的 MVVM 企业应用程序是否有意义。您是否要将云托管配置文件用于一项设置?
    • 我正在研究 SRM;我不需要云存储或任何其他相关程序;感谢您的帮助
    【解决方案2】:

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

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

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

    【讨论】:

    • 你的意思是从 ViewMode 到 View 的引用; ...或者从 View 到 ViewModel 有参考(针对 MVVM)?
    • View 引用 -> ViewModel 不反对 MVVM。这在概念上与Binding 相同。我不知道你在说什么。
    • 对不起;我犯了错误;感谢您的帮助;
    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多