条件操作的事件聚合器

时间:2012-06-20 23:44:37

标签: prism toast eventaggregator

我参与了WPF Prism应用程序的开发,该应用程序使用事件聚合器发送全局类型的消息,然后由shell获取。例如,一个视图模型可能希望显示一个Toast消息,但并不真正关心它是如何显示的。在这种情况下,shell将被设置为处理这些事件并在应用程序范围内对它们进行操作。

我的问题是如果特定视图想要以不同方式显示Toast消息,您如何做到这一点。我喜欢全局方法,因为它非常简单,但如何针对特殊情况进行自定义?

2 个答案:

答案 0 :(得分:1)

为此目的使用Eventaggregator不是我想的正确方法,因为事件被广播到整个应用程序。

处理场景的一种可能方法是viewmodels可以在构造函数中注入一个IMessenger接口。有一个IMessenger的应用程序实现(默认注入),您可以根据需要定制IMessenger实现。您的viewmodel只调用一个接口函数(比如DisplayMessage()),但根据注入它的Messenger,行为是不同的。

答案 1 :(得分:1)

我认为这实际上取决于您的应用程序的设置方式以及您使用的标准/模式。在MVVM中,我看到两种方法。

查看-第一
如果将View模型注入到视图中,则将消息发送到视图,然后让View决定如何处理它。如果它想要自己显示它们,它可以做到这一点。如果它想将它们发送到您的shell,它可以通过事件聚合器或注入Toast服务接口来实现。这使您的View可以控制视觉效果。

查看-模型首先
如果您的View被注入View模型,那么您的View Model应该要求一个不同的View,它应该绑定到它自己的View Model。如果它想要将消息发送到另一个View-Model,它可以通过事件聚合器或注入Toast View-Model / service接口来实现。这使View模型可以控制视图之间的导航。

我更喜欢View-First方法,因为它可以让您的View控制模型的可视化。但我对其他MVVM开发人员如何解决这个问题非常感兴趣。这似乎与如何在MVVM View-First方法中呈现对话框的问题非常接近。