代码之家  ›  专栏  ›  技术社区  ›  senfo

使用MVVM基金会信使显示对话框

  •  4
  • senfo  · 技术社区  · 15 年前

    我正在构建一个WPF应用程序,并尝试遵循MVVM最佳实践。我用的是 MVVM Foundation 框架并注意到 Messenger 我读过的课应该用在 handling dialogs in WPF . 这听起来不错,但我完全不理解如何使用信使来达到这个目的。实际上,我只想打开一个关于对话的模式——我不需要来回传递任何消息。

    messenger类的目的是用于对话框需要其父级消息或将消息返回其父级的情况吗?对于一个“关于”对话框来说,这是多余的吗?我最好简单地向事件处理程序添加代码来显示对话框吗?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Brad Cunningham    15 年前

    消息模式背后的想法与显示对话框没有任何特别的关系。其思想只是提供一种在视图模型之间进行通信的分离方式。

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

    如上面Phillip所示,您可以在视图模型之间发送消息。当您的ViewModel收到消息时,它可以将自己的内部属性设置为true,比如说“ShowDialog”。

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

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

        2
  •  3
  •   Community CDub    8 年前

    假设您有一个父视图和一个对话框视图。在MVVM中,它们都有一个视图模型。保持这些视图模型的分离是很好的,也就是说,它们没有彼此的引用。但他们需要相互沟通。messenger类充当中间人或中介人来调解两个类之间的信息通信。查看代码取自 Josh's blog .

    alt text

    这里是对象A。它调用中介的register方法实现:当我从中介接收到消息objectbsaidsomething时,我将把它缓存在成员whatobjectbsays中。

    alt text

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

    推荐文章