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

Edw*_*uay 5 wpf design-patterns prism mvvm

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

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

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

小智 6

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

例:

桌面电子邮件应用程序:

模块:

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

如果邮件项列表框中的选择被更改,它将MailID发布到事件聚合器,然后详细信息视图知道更改,然后它通过MailID获取该电子邮件的MessageBody.其中"MailItems"和"DetaliView"模块已经开发了不同的小组,但他们已经MailID中之间的共同期望的消息.