我正在 WPF 中实现 MVP/M-V-VM,到目前为止我很幸运。但是,我不知道该模型如何支持实现模态对话框。我的工作源自 Crack.NET (http://www.codeplex.com/cracknetproject)来了解这个东西是如何工作的。
我有一个 ShellView 视图(只是 XAML),上面有一个菜单。该菜单绑定到 ShellModelView 中的“EditPreferences”命令。
ShellModelView 实现了 EditPreferences 的 ICommand,这里我们想要建立一个对话框来让用户编辑应用程序的首选项。
这里有几个问题:
1. ShellModelView 没有对 ShellView 的引用来正确设置对话框的父级。 ShellModelView 是 ShellView 的 DataContext,但我没有看到设置的反向引用。
2. ShellModelView 无论如何都不应该加载显式 UI。那么这里正确的交互模型是什么?
3. 如何构建 PreferencesDialog,使其在逻辑和视图之间正确分离? PreferencesDialog 本身需要是一个 Window,以便您可以在其上调用 ShowDialog,但这意味着您需要对 Window(例如 View)的引用才能实例化它。理想情况下,我应该能够在 PreferencesDialog 中对代码/验证进行单元测试,而无需实例化视图(也许使用模拟视图?)。
也许这不是正确的看待方式,但这是我在 WPF 中使用 M-V-VM 所采用的方法。打开窗口和对话框或“EditPreferences”视图是 UI 特定功能。如果我要重写整个 UI 来替换所有视图,我可能最终会将“EditPreferences”视图与另一个视图结合起来,因此永远不想在另一个屏幕中打开它。如果这与 ViewModel 绑定在一起,那么就很难解决。在这种特殊情况下,我的“ShellView”中有一个按钮或菜单项,它创建“EditPreferences”视图的新实例,然后传入“EditPreferences”ViewModel,该视图模型可能来自“ShellViewModel”中的属性”,或者也许我的“EditPreferences”视图实例化了 ViewModel 本身。
这是一个关于 SO 的类似问题,基本上说的是同样的事情:M-V-VM 设计问题。从 ViewModel 调用 View
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)