使用MVVM模式打开“关于”框

使用MVVM模式打开“关于”框,mvvm,modal-dialog,about-box,Mvvm,Modal Dialog,About Box,我正在开发一个新的WPF应用程序,并试图尽可能接近MVVM模式。现在我的XAML文件没有代码滞后,我所有的交互都是使用Josh Smith的RelayCommand类和ViewModel类中的命令实现的 在我开始处理内务管理任务之前,这非常有效,例如“关于”框和“系统首选项”页面。我希望将这些作为模式对话框,但是如果我创建一个RelayCommand来打开这些页面,我将在视图模型中创建对视图的依赖关系 这与MVVM模式的纹理相反,给我留下了深刻的印象 是否有一种在MVVM模式中创建新窗口(模式和

我正在开发一个新的WPF应用程序,并试图尽可能接近MVVM模式。现在我的XAML文件没有代码滞后,我所有的交互都是使用Josh Smith的RelayCommand类和ViewModel类中的命令实现的

在我开始处理内务管理任务之前,这非常有效,例如“关于”框和“系统首选项”页面。我希望将这些作为模式对话框,但是如果我创建一个RelayCommand来打开这些页面,我将在视图模型中创建对视图的依赖关系

这与MVVM模式的纹理相反,给我留下了深刻的印象

是否有一种在MVVM模式中创建新窗口(模式和/或非模式)而不创建依赖项的既定方法?看来保持ViewModel干净的唯一方法是在XAML codebehind文件中创建一个Click事件处理程序,并在旧视图中创建新视图


有什么建议吗?

处理这个问题的一种方法是实现一个为ViewModels提供视图的服务。视图向服务注册,ViewModels可以从服务请求对话框。这是四人帮的一个例子

请参阅我对为什么Window类本身是ViewModel的回答,这样您就可以直接从ViewModel使用它而不用担心。Laurent Bugnon有一个弱引用中介,他使用它来显示对话框消息。除了广播的消息外,还将发送一个回调委托,供订阅者执行。您可以使用相同的概念来显示“关于”对话框。查看DialogMessage.cs。

我们使用负责UI工作流的控制器类。它们创建模式窗口,并在各种视图模型之间进行调解

ViewModel示例应用程序中显示了如何使用视图模型ViewModel(MVVM)模式打开模式窗口:

WPF应用程序框架(WAF)


看看我的Silverlight 4模式对话框解决方案: