我按照Prism指南进行工作,并认为我对他们的大多数沟通工具有所了解。

命令非常简单,因此很显然DelegateCommand将仅用于将视图与其模型连接。

对于跨模块通信,特别是何时在复合命令上使用EventAggregation,尚不清楚。

实际效果是相同的,例如


您发布事件->所有订阅者都会收到通知并执行代码以响应
您执行复合命令->所有已注册的命令都将被执行,并附带其附加代码


两者都遵循“即发即弃”的原则,也就是说,它们在触发事件/执行命令后,并不关心订阅者的任何响应。

尽管我知道两者的实现(在幕后)非常不同,但我很难看到用法的实际差异。

那么,我们应该考虑一下事件的实际含义吗?那是什么时候发生(事件发生)吗?用户没有像“网络请求已完成”那样直接请求?

和命令?这是否意味着用户单击了某个内容,然后向我们的应用程序发出了命令,直接请求服务?

是吗或者还有其他方法来确定何时使用这些通信工具中的一种来代替另一种。该指南虽然是我读过的最好的文档之一,但没有给出具体说明。

因此,我希望参与/使用Prism的人员可以帮助您对此有所了解。

最佳答案

两者之间有两个主要区别。


可以执行命令。命令
可以说它是否有效
通过调用执行
Command.RaiseCanExecuteChanged()和
有其CanExecute委托
返回false。如果您考虑
“全部保存”的情况
CompositeCommand合成几种
“保存”命令,但其中之一
命令说它不能
执行,全部保存按钮将
自动禁用(不错!)。
EventAggregator是一个消息传递
模式和命令是一个
指挥模式。虽然
CompositeCommands没有明确
UI模式,它隐含地
(通常,它们与
输入操作,例如单击按钮)。
EventAggregator不是这种方式-
应用程序的任何部分
有效地提高一个EventAggregator
事件:后台进程,
ViewModels,等等。
中介的消息传递途径
在您的应用程序的支持下
对于诸如过滤之类的事情,
后台线程执行等


希望这有助于解释差异。很难说出何时使用它们,但通常我会凭经验得出这样的规则:如果是引发事件的用户交互,则对其他任何命令使用命令,然后使用EventAggregator。

希望这可以帮助。

10-08 07:02