我应该何时使用事件处理程序而不是事件聚合器?
在我的代码中,我有两个由父ViewModel控制的ViewModel,我试图决定是否应该使用事件处理程序在它们之间进行通信?或者使用Event Aggregator?它只是简单的方法调用,我不需要在它们之间传递参数。
答案 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面板或设备)有利到设备通信)。