我正在开发一个新的WPF应用程序,我正试图保持尽可能接近MVVM模式。我的XAML文件现在没有代码隐藏,我的所有交互性都是使用Josh Smith的RelayCommand类和我的ViewModel类中的命令实现的。
这很有用,直到我开始处理内务处理任务,例如关于框和系统首选项页面。我希望将这些作为模态对话框,但如果我创建一个RelayCommand来打开这些页面,我将在视图模型中创建对视图的依赖。
这让我觉得与MVVM模式不同。
是否有建立的方法在MVVM模式中创建新窗口(模态和/或无模式)而不创建依赖关系?似乎我可以保持ViewModel干净的唯一方法是在XAML代码隐藏文件中创建一个Click事件处理程序,并在旧视图中创建新视图。
有什么建议吗?
答案 0 :(得分:7)
处理此问题的一种方法是实现向ViewModel提供视图的服务。视图向服务注册,ViewModels可以从服务请求对话框。这是四人帮mediator pattern的一个例子。
答案 1 :(得分:1)
看看我对Silverlight 4的Modal Dialogs解决方案:
答案 2 :(得分:0)
请参阅我对this question的回答,了解为什么Window类本身是ViewModel,因此您可以直接从ViewModel中使用它而无需担心。
答案 3 :(得分:0)
Laurent Bugnion有一个弱引用的调解器,在其中使用它来显示对话框消息。与广播的消息一起,发送回叫委托以供订户执行。您可以使用相同的概念来显示关于对话框。查看DialogMessage.cs from the source here。
答案 4 :(得分:0)
我们使用负责UI工作流的Controller类。他们创建模态窗口,并在各种ViewModel之间进行调解。
如何在ViewModel示例应用程序中显示如何使用View-Model-ViewModel(MVVM)模式打开模式窗口:
WPF应用框架(WAF)