【问题标题】:Using MVVM Foundation Messenger to Show Dialog使用 MVVM Foundation Messenger 显示对话框
【发布时间】:2009-11-24 20:45:33
【问题描述】:

我正在构建一个 WPF 应用程序并尝试遵循 MVVM 最佳实践。我正在使用MVVM Foundation 框架并注意到Messenger 类,我读过它应该用于handling dialogs in WPF。这听起来不错,但我完全不明白如何为此目的使用 Messenger。从字面上看,我要做的就是打开一个模态的 About 对话框——我不需要来回传递任何消息。

Messenger 类的意图是用于对话框需要来自其父级的消息或将消息返回给其父级的情况吗?关于对话框是否过大?将代码添加到事件处理程序以显示对话框会更好吗?

【问题讨论】:

    标签: wpf mvvm dialog mvvm-foundation messenger


    【解决方案1】:

    消息模式背后的想法与显示对话框没有任何关系。这个想法只是提供一种解耦的方式来在 ViewModel 之间进行通信。

    您可以利用此基础架构来解决您的问题,但您必须自己实现对话框的显示。

    正如上面 Phillip 所示,您可以在 ViewModel 之间发送消息。当您的 ViewModel 收到消息时,它可以将自己的内部属性(例如“ShowDialog”)设置为 true。

    然后,您可以拥有一个对该属性更改操作做出反应并打开对话框的绑定。

    我还为 MVVM 模式构建了一个简单的消息传递框架,该框架借鉴了 Josh 的想法(以及其他几个现有框架),您可以阅读它here

    【讨论】:

    • Oooohhh ......现在更有意义了。 MyViewModel 向 AboutViewModel 发送一条消息,AboutViewModel 打开 About 对话框。这绝对消除了我的困惑。非常感谢。
    【解决方案2】:

    假设您有一个父视图和一个对话框视图。在 MVVM 中,它们都有一个视图模型。保持这些视图模型解耦是很好的,即它们之间没有相互引用。然而,他们需要相互交流。 Messenger 类充当中间人或中介者,以调解两个类之间的信息通信。请参阅取自 Josh's blog 的代码。

    这里是对象A。它调用中介者的Register方法实现:当我收到来自中介者的消息ObjectBSaidSomething时,我会将它缓存在成员WhatObjectBsays中。

    这里是Object B,它实现了:我要发送一个消息ObjectBSaidSomething。请注意,对象 B 对对象 A 一无所知。可能没有任何对象监听 ObjectBSaidSomething,或者有 100 个对象监听 ObjectBSaidSomething,但对象 B 不知道也不关心。这是很好的解耦,这就是为什么 Mediator 模式是个好主意。这就是 MVVM 基金会建议在视图模型之间传递信息的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 2019-05-20
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      相关资源
      最近更新 更多