模型 - 视图 - 演示者和模态对话框....如何?

7 wpf mvp design-patterns mvvm

我正在WPF中实现MVP/MV-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中对代码/验证进行单元测试,而无需实例化视图(可能使用Mock视图?).

Mic*_*cah 6

也许这不是查看它的合适方式,但这是我在WPF中使用MV-VM的方法.打开窗口和对话框或"EditPreferences"视图是UI特定的功能.如果我要重写整个UI来替换所有视图,我可能最终将"EditPreferences"视图与另一个视图结合起来,因此永远不想在另一个屏幕中打开它.如果这与ViewModel绑定,则很难绕过.在这种特殊情况下,我的"ShellView"中有一个按钮或菜单项,它创建了我的"EditPreferences"视图的新实例,然后传入"EditPreferences"ViewModel,它可能来自我的"ShellViewModel"中的属性"或者我的"EditPreferences"视图可以实例化ViewModel本身.

这是一个关于SO的类似问题基本上说同样的事情:MV-VM设计问题.从ViewModel调用View


lig*_*gaz 1

您的情况需要一个控制器。控制器应该负责显示首选项对话框窗口。

正如我可以想象的那样,控制器应该负责创建 ShellModelView 并将视图的 DataContext 绑定到它。控制器还应该负责处理 EditPreferences 的命令执行。在执行逻辑中,控制器将创建一个新的 PreferencesDialog 及其相应的视图模型。

如果您还没有在Prism中找到类似的模式,您可以这样做。您还可以重用那里提供的 DelegateCommand :)