使用MVVM模式打开关于窗口

10

我正在开发一个新的WPF应用程序,尽可能地遵循MVVM模式。目前我的XAML文件没有代码后台,所有的交互都是通过Josh Smith的RelayCommand类和ViewModel类中的命令实现的。

这个方法在处理一些常规任务时非常有效,例如关于框和系统首选项页面。我想将它们作为模态对话框呈现,但如果我创建一个RelayCommand来打开这些页面,我将在我的ViewModel中创建一个对View的依赖。

这让我感觉违反了MVVM模式的原则。

有没有一种已经建立的方法可以在MVVM模式下创建新窗口(模态或非模态)而不会创建依赖关系?似乎唯一能保持ViewModel干净的方法是在XAML代码后台文件中创建Click事件处理程序,并在旧视图中创建新视图。

有什么建议吗?

5个回答

7

处理这个问题的一种方法是实现一个提供视图给ViewModels的服务。视图向服务注册,而ViewModels可以从服务请求对话框。这是Gang of Four 中介者模式的一个示例。


1

0

请查看我对这个问题的回答,关于为什么 Window 类本身就是一个 ViewModel,所以你可以直接从你的 ViewModel 中使用它而不必担心。


0
Laurent Bugnion使用了一个弱引用的中介者来显示对话框消息。除了广播的消息外,还发送了一个回调委托以供订阅者执行。您可以使用相同的概念来显示关于对话框。请查看DialogMessage.cs 源代码链接

0

我们使用控制器类来负责UI工作流程。它们创建模态窗口并在各种ViewModel之间进行调解。

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

WPF应用程序框架(WAF)

http://waf.codeplex.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接