我通过Prism指导工作,并认为我掌握了他们的大多数通信工具。
命令非常简单,因此很明显,DelegateCommand仅用于将View与其模型连接。
在交叉模块通信方面,特别是何时使用EventAggregation而不是复合命令,这一点不太清楚。
实际效果是相同的,例如。
两者都按照“发射并忘记”的方式工作,即他们在触发事件/执行命令后不关心其订阅者的任何响应。
我很难看到使用方法的实际差异,虽然我知道两者的实现(在引擎盖下)是非常不同的。
我们应该考虑它的实际含义 - 事件?是什么事情发生(事件发生)?用户没有像“完成网页请求”那样直接请求的东西?
和命令?这是否意味着用户点击了某些东西,从而向我们的应用程序发出命令,直接请求服务?
是吗?或者是否有其他方法可以确定何时使用其中一种通信工具而不是另一种。该指南虽然是我读过的最好的文件之一,却没有给出具体的解释。所以我希望参与/使用棱镜的人可以帮助揭示这一点。
答案 0 :(得分:14)
这两者之间存在两个主要差异。
希望这有助于解释这些差异。说什么时候使用每个都比较困难,但通常我会使用经验法则如果是用户交互引发事件,则使用命令执行其他操作,使用EventAggregator 。
希望这有帮助。
答案 1 :(得分:6)
此外,还有一个更重要的区别:使用当前实现,EventAggregator中的事件是异步,而CompositeCommand是同步。
如果你想实现类似“通知事件X发生的事情;做一些依赖于事件X的事件处理程序执行的事情”,你要么必须做类似Application.DoEvents()的事情,要么使用CompositeCommands。 / p>