【问题标题】:Opening an about box using MVVM pattern使用 MVVM 模式打开关于框
【发布时间】:2010-11-22 12:14:39
【问题描述】:

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

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

这让我觉得违背了 MVVM 模式的本质。

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

有什么建议吗?

【问题讨论】:

    标签: mvvm modal-dialog about-box


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      Modal dialogs with MVVM and Silverlight 4

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            如何使用 View-Model-ViewModel (MVVM) 模式打开模式窗口,请参见此处的 ViewModel 示例应用程序:

            WPF 应用程序框架 (WAF)

            http://waf.codeplex.com

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-09-09
              • 1970-01-01
              • 2010-11-30
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多