我正在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视图?).
也许这不是查看它的合适方式,但这是我在WPF中使用MV-VM的方法.打开窗口和对话框或"EditPreferences"视图是UI特定的功能.如果我要重写整个UI来替换所有视图,我可能最终将"EditPreferences"视图与另一个视图结合起来,因此永远不想在另一个屏幕中打开它.如果这与ViewModel绑定,则很难绕过.在这种特殊情况下,我的"ShellView"中有一个按钮或菜单项,它创建了我的"EditPreferences"视图的新实例,然后传入"EditPreferences"ViewModel,它可能来自我的"ShellViewModel"中的属性"或者我的"EditPreferences"视图可以实例化ViewModel本身.
这是一个关于SO的类似问题基本上说同样的事情:MV-VM设计问题.从ViewModel调用View