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

Wpf Prism(CAL)中的模块如何相互通信?,wpf,mvvm,design-patterns,prism,Wpf,Mvvm,Design Patterns,Prism,我有一个WPF应用程序,它始终使用MVVM模式,没有代码隐藏,ViewModels通过MainViewModel相互通信,MainViewModel被注入其中 最终,需要将此应用程序合并到使用复合应用程序库、Unity等的应用程序中。通过查看CAL的代码和文档,我可以了解如何将整个应用程序注册为CAL应用程序中的模块,但我的应用程序作为模块将如何和其他也动态加载的模块通信?例如,我期望每个模块以某种方式注入CAL应用程序,或者有某种事件控制器或信使,我可以与其他模块松散地通信,也就是说,可以发送

我有一个WPF应用程序,它始终使用MVVM模式,没有代码隐藏,ViewModels通过MainViewModel相互通信,MainViewModel被注入其中

最终,需要将此应用程序合并到使用复合应用程序库、Unity等的应用程序中。通过查看CAL的代码和文档,我可以了解如何将整个应用程序注册为CAL应用程序中的模块,但我的应用程序作为模块将如何和其他也动态加载的模块通信?例如,我期望每个模块以某种方式注入CAL应用程序,或者有某种事件控制器信使,我可以与其他模块松散地通信,也就是说,可以发送消息并响应事件,但不必担心这些模块是否实际存在

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

请查看Prism。

如果您使用的是CAL(Prism),请查看/CompositePresentationEvent,其中它使用发布者/订阅者模式(也称为发布/订阅),以便应用程序的某些模块订阅到事件聚合器,因此,当另一个模块有更改时,它会将更改(例如:(SelectedItemChanged)发布到事件聚合器,如果其他模块对已发布的更改感兴趣,它们将在应用程序的该部分中执行操作

例如:

桌面电子邮件应用程序:

模块:

  • 邮件项目(MailID、主题、发件人、发送日期等)
  • 详细视图(MessageBody)
如果邮件列表框中的选择发生更改,它会将邮件ID发布到事件聚合器,然后详细信息视图知道更改,然后通过邮件ID获取该电子邮件的邮件正文。其中,“MailItems”和“DetaliView”模块由不同的团队开发,但它们之间有MailID作为一条常见的预期消息