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

Wpf 使用MVVM基金会信使显示对话框,wpf,mvvm,dialog,mvvm-foundation,messenger,Wpf,Mvvm,Dialog,Mvvm Foundation,Messenger,我正在构建一个WPF应用程序,并试图符合MVVM最佳实践。我正在使用这个框架,并注意到这个类,我已经读过,它应该用于。这听起来不错,但我完全不明白如何使用信使来实现这一目的。实际上,我只想打开一个关于对话框的模式——我不需要来回传递任何消息 Messenger类的目的是用于对话框需要来自其父级的消息或将消息返回给其父级的情况吗?对一个关于对话来说是不是太过分了?简单地向事件处理程序添加代码以显示对话框是否更好?假设您有一个父视图和一个对话框视图。在MVVM中,它们都有一个视图模型。保持这些视图模

我正在构建一个WPF应用程序,并试图符合MVVM最佳实践。我正在使用这个框架,并注意到这个类,我已经读过,它应该用于。这听起来不错,但我完全不明白如何使用信使来实现这一目的。实际上,我只想打开一个关于对话框的模式——我不需要来回传递任何消息


Messenger类的目的是用于对话框需要来自其父级的消息或将消息返回给其父级的情况吗?对一个关于对话来说是不是太过分了?简单地向事件处理程序添加代码以显示对话框是否更好?

假设您有一个父视图和一个对话框视图。在MVVM中,它们都有一个视图模型。保持这些视图模型的解耦是很好的,也就是说,它们彼此没有引用。但他们需要相互沟通。Messenger类充当中间人或调解人,以调解两个类之间的信息通信。请参阅取自的代码

这是对象A。它对中介的Register方法的调用实现了:当我从中介接收到消息ObjectBSaidSomething时,我将它缓存在成员WhatObjectBSays中


这里是对象B,它实现了:我将发送一条消息ObjectBSaidSomething。注意,对象B对对象A一无所知。可能没有任何对象侦听ObjectBSaidSomething,或者有100个对象侦听ObjectBSaidSomething,但对象B不知道也不关心。这是很好的解耦,这就是为什么中介模式是一个好主意。这就是MVVM基金会建议在视图模型之间传递信息的方式。 消息传递模式背后的理念与显示对话框没有任何关系。其思想只是提供一种解耦的方式在ViewModels之间进行通信

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

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

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


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

ooohh…..现在,这就更有意义了。MyViewModel向AboutViewModel发送消息,AboutViewModel打开About对话框。这无疑消除了我的困惑。非常感谢你。