Eventaggreagtor在Prism框架中的作用是什么?

时间:2012-08-29 05:38:21

标签: prism eventaggregator

我有一些想法,为了减少发布和订阅事件的复杂性,Eventaggregator充当单一来源。 在这方面还可以理解什么。 我只想要一般性的描述而不是代码中的例子。

2 个答案:

答案 0 :(得分:0)

从EventAggregator MSDN page的第一行开始:


EventAggregator服务主要是一个容器,用于允许发布者和订阅者脱钩的事件,以便它们可以独立发展。这种解耦在模块化应用程序中很有用,因为可以添加新模块来响应shell定义的事件,或者更可能是其他模块。


阅读该页面的其余部分,以了解更多有关它的工作原理以及如何使用它的示例。我想遵循的一般规则是,对于Model-> ViewModel通信,标准.NET事件是好的,但对于ViewModel-> ViewModel(或模块 - >模块)通信(其中两者都不应该真正“知道”每个其他),EventAggregator很不错。

答案 1 :(得分:0)

EventAggregator的想法是你不需要知道引发事件的源对象。一般来说,订阅/监听事件必须将源对象带到您的类,然后订阅这样的事件:

// Object will raise event
public class EventSourceClass
{
   public event EventHandler<EventArgs> OnMyEvent;
}

现在 - 想要订阅事件的类/对象必须以某种方式知道 EventSourceClass类,如下所示:

// Object will listen to events from very specific (EventSourceClass) class
public class EventListenerClass
{
   ...
   EventSourceClass eventSourceClass = new EventSourceClass(....);
   eventSourceClass.OnMyEvent += ......
   ...
 }

EventAggregator只是简单点一下:

  • 您定义描述事件的类(类继承自CompositePresentationEvent<>
  • 然后在事件提升者课程中,当您准备举起活动时,您只需EventAggregator.GetEvent<event-type>().Publish(build-your-event-here)
  • 在事件监听器类中,您只需EventAggregator.GetEvent<event-type>().Subscribe(function-that-will-start-to-work)到此事件。

    它被称为从侦听器中解耦源对象,因为引发事件的类和事件监听器类不必相互了解 - 它们都应该只知道EventAggregator - 最终事件传递/事件总线对象

    如果您发现此信息对您有用,请告诉我。