我正在WPF中实现MVP/M-V-VM,到目前为止,我很幸运。但是,我看不到此模型如何支持实现“模态”对话框。我是从Crack.NET(http://www.codeplex.com/cracknetproject)派生我的作品的,以了解这些东西是如何工作的。
我有一个ShellView View (只是XAML),上面有一个菜单。该菜单绑定(bind)到ShellModelView中的命令“EditPreferences”。
ShellModelView为EditPreferences实现了ICommand,在这里我们想建立一个对话框,让用户编辑应用程序的首选项。
这里有几个问题:
1. ShellModelView没有对ShellView的引用以正确地使对话框成为父级。 ShellModelView是ShellView的DataContext,但没有看到设置的反向引用。
2. ShellModelView无论如何都不应加载显式UI。那么,这里合适的交互模型是什么?
3.如何建立我的PreferencesDialog,以便它在逻辑和 View 之间也能正确分离? PreferencesDialog本身必须是一个Window,以便您可以在其上调用ShowDialog,但这意味着您需要对Window的引用(例如View)才能实例化它。理想情况下,我应该能够在PreferencesDialog中对代码/验证进行单元测试,而无需实例化 View (也许使用Mock View ?)。
最佳答案
也许这不是查看它的合适方法,但这是我在WPF中使用M-V-VM所采用的方法。 UI特定的功能是打开窗口和对话框或“EditPreferences” View 。如果要重写整个UI来替换所有 View ,则可能会将“EditPreferences” View 与另一个 View 结合起来,因此永远不想在另一个屏幕上打开它。如果将它与ViewModel绑定(bind)在一起,将很难解决。在这种特殊情况下,我将在“ShellView”中拥有一个按钮或菜单项,以创建“EditPreferences” View 的新实例,然后传递“EditPreferences” ViewModel,该 View 模型可能来自“ShellViewModel”中的一个属性”,或者我的“EditPreferences” View 实例化ViewModel本身。
这是一个关于SO的类似问题,基本上说了同样的事情:M-V-VM Design Question. Calling View from ViewModel