Prism(CAL)中的模块如何相互通信?

时间:2009-07-01 11:03:27

标签: wpf mvvm design-patterns prism

我有一个WPF应用程序,它始终使用MVVM模式,没有代码隐藏,ViewModel通过MainViewModel相互通信,并将其注入到每个模块中。

最终,此应用程序需要合并到使用Composite Application Library,Unity等的应用程序中。通过CAL的代码和文档,我可以看到如何注册我的整个应用程序< / em>作为CAL应用程序中的模块,但我的应用程序模块如何与其他动态加载的模块进行通信?我期待,例如每个模块以某种方式注入CAL应用程序,或者存在某种事件控制器 Messenger ,我可以通过它与其他模块,即可以发送消息并响应事件,但不担心这些模块是否真的存在。

复合应用程序模块如何相互通信?

2 个答案:

答案 0 :(得分:6)

如果您正在使用CAL(Prism),请查看Event Aggregator / CompositePresentationEvent,它使用发布者/订阅者模式(也称为Pub / Sub),因此应用程序的某些模块订阅了事件聚合器,所以当另一个模块进行了更改,它将发布更改,例如(SelectedItemChanged)更改为Event Aggregator,如果其他模块对更改感兴趣,则发布它们将在应用程序的部分内部执行。

示例:

桌面电子邮件应用程序:

模块:

  • 邮件项目( MailID ,主题,发件人,SentDate..etc)
  • 详情视图(MessageBody)

如果邮件项目列表框中的选择被更改,它会将 MailID 发布到事件聚合器,然后详细信息视图了解更改,然后通过 MailID 即可。其中“MailItems”和“DetaliView”模块是由不同的团队开发的,但它们之间有 MailID 作为常见的预期信息。

答案 1 :(得分:3)

查看Prism的event aggregator