我有一些想法,为了减少发布和订阅事件的复杂性,Eventaggregator充当单一来源。 在这方面还可以理解什么。 我只想要一般性的描述而不是代码中的例子。
答案 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
- 最终事件传递/事件总线对象
如果您发现此信息对您有用,请告诉我。