什么时候应该使用事件处理程序而不是事件聚合器?
在我的代码中,我有两个由父ViewModel控制的ViewModel,我试图决定是否应该只使用事件处理程序在它们之间进行对话?或者使用事件聚合器?这将只是一个简单的方法调用,我不需要在它们之间传递参数。
在我看来,EventAggregator通常是重炮,当您想将事件发布到整个应用程序时使用,更具体地说,当您不知道到底是谁在监听时使用。
在您的场景中,情况并非如此,您有两个视图模型想要进行通信,但它们都相互了解。因此,没有什么真正的理由不能使用events
。
我只想提一下,如果你想让它保持一点松散的耦合——为每个公开事件的视图模型制作一个接口。这样,每个虚拟机都将使用其他虚拟机的接口,而不是特定的实例。
这里有一个包含一些好信息的链接(截至2019年5月有效)。。。https://learn.microsoft.com/en-us/previous-versions/windows/apps/xx130639(v%3dwin.10)(微软,棱镜)
";做出关键决策;第节介绍了何时使用。
.NET中的事件实现了发布-订阅模式。发布者和订阅者的生存期通过对象引用相互耦合,订阅者类型必须具有对发布者类型的引用。
事件聚合是一种设计模式,它允许在不方便通过对象和类型引用链接的类之间进行通信。这种机制允许发布者和订阅者在没有相互引用的情况下进行通信。因此,.NET事件应用于已经具有对象引用关系的组件(如控件和包含控件的页面)之间的通信,事件聚合用于松散耦合组件(如应用程序中的两个独立页面视图模型)之间的通信。有关更多信息,请参阅事件聚合。
我粗略地认为,这表明C#事件对层(监听总线逻辑的UI)或父/子(监听其包含的设备的仪器)有利,事件聚合对兄弟(例如,兄弟UI面板或设备对设备通信)有利。