wpf - Model-View-Presenter 和 Modal 对话框.... 如何?

标签 wpf design-patterns mvvm mvp

我正在 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)的引用才能实例化它。理想情况下,我应该能够在不实例化 View 的情况下对 PreferencesDialog 中的代码/验证进行单元测试(也许使用 Mock View ?)。

最佳答案

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

这是关于 SO 的类似问题,基本上说的是同一件事:M-V-VM Design Question. Calling View from ViewModel

关于wpf - Model-View-Presenter 和 Modal 对话框.... 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/315180/

相关文章:

c# - 使用 OpenXML 和 C# 处理 word 文档

c# - 与 char 变量相对的下一个字母

c# - 代码改进 : Better alternatives to this pattern?

design-patterns - 使用敏捷方法或其他方式编写松散耦合代码的建议

c# - 我可以用欧洲符号存储我的 DateTime 吗?

wpf - ICommand 不使用 CanExecute 更新按钮上的 IsEnabled

c# - 如果内容不为空,未使用的 ListBoxItem 会导致绑定(bind)错误

c# - 避免与 datagridview WPF 重叠

java - 可能的设计模式而不是 instanceof?

ios - 具有业务和数据层的 Swift MVVM 示例