10

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

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

这让我觉得与 MVVM 模式的本质背道而驰。

是否有在 MVVM 模式中创建新窗口(模态和/或无模态)而不创建依赖项的既定方法?似乎我可以保持 ViewModel 干净的唯一方法是在 XAML 代码隐藏文件中创建一个 Click 事件处理程序,并在旧视图中创建新视图。

有什么建议吗?

4

5 回答 5

7

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

于 2009-08-25T05:35:05.610 回答
1

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

带有 MVVM 和 Silverlight 4 的模态对话框

于 2010-01-21T21:32:32.817 回答
0

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

如何使用 View-Model-ViewModel (MVVM) 模式打开模式窗口在此处的 ViewModel 示例应用程序中显示:

WPF 应用程序框架 (WAF)

http://waf.codeplex.com

于 2009-08-29T10:01:42.353 回答
0

Laurent Bugnion 有一个弱引用中介,他用它来显示对话消息。与广播的消息一起,发送回调委托以供订阅者执行。您可以使用相同的概念来显示关于对话框。从这里的源代码中查看 DialogMessage.cs 。

于 2009-08-25T19:03:56.580 回答
0

请参阅我对这个问题的回答,了解为什么 Window 类本身是 ViewModel,因此您可以直接从 ViewModel 中使用它而无需担心。

于 2009-08-25T12:05:52.637 回答