我应该何时在事件聚合器上使用事件处理程序?

时间:2012-11-26 13:24:52

标签: c# wpf mvvm event-handling eventaggregator

我应该何时使用事件处理程序而不是事件聚合器?

在我的代码中,我有两个由父ViewModel控制的ViewModel,我试图决定是否应该使用事件处理程序在它们之间进行通信?或者使用Event Aggregator?它只是简单的方法调用,我不需要在它们之间传递参数。

2 个答案:

答案 0 :(得分:5)

我看到它的方式,EventAggregator通常是重枪,当您想要将事件发布到整个应用程序时,更具体地说 - 当你不知道时知道究竟是谁在听。

在您的情况中并非如此,您有2个想要进行通信的视图模型,但它们彼此都知道。所以没有理由不能使用events

我只想提一下,如果你想保持它更松散耦合 - 为每个暴露事件的视图模型创建一个接口。这样,每个VM将使用其他VM的接口而不是特定实例。

答案 1 :(得分:1)

这里有一些不错的信息的链接(截至5/2019仍然有效)... https://docs.microsoft.com/en-us/previous-versions/windows/apps/xx130639(v%3dwin.10)(Microsoft,Prism)

“做出关键决定”部分介绍了何时使用它。

  

.NET中的事件实现发布-订阅模式。发布者和订阅者的生存期之间通过对象引用相互关联,并且订阅者类型必须具有对发布者类型的引用。

     

事件聚合是一种设计模式,它使不方便的类之间的通信可以通过对象和类型引用进行链接。此机制允许发布者和订阅者进行通信,而无需互相参考。因此,.NET事件应该用于已经具有对象引用关系的组件之间的通信(例如,控件和包含该控件的页面),而事件聚合则用于松散耦合的组件之间的通信(例如,两个单独的页面视图模型)在应用中)。有关更多信息,请参阅事件聚合。

我粗略地认为这表明C#事件对于层(UI侦听总线逻辑)或父/子(一种工具侦听其包含的设备)有利,而事件聚合对同级兄弟(例如同级UI面板或设备)有利到设备通信)。