5

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

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

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

4

2 回答 2

6

如果您使用 CAL(Prism) 查看事件聚合器/CompositePresentationEvent,它使用发布者/订阅者模式(又名发布/订阅),因此应用程序的某些模块订阅了事件聚合器,因此当另一个模块发生更改时,它将将更改(例如(SelectedItemChanged))发布到事件聚合器,如果其他模块对已发布的更改感兴趣,它们将在应用程序的该部分执行。

例子:

桌面电子邮件应用程序:

模块:

  • 邮件项目(MailID、Subject、Sender、SentDate..etc)
  • 详细信息视图 (MessageBody)

如果 Mail Items ListBox 中的选择发生更改,它将MailID发布到 Event Aggregator,然后 Detail View 知道更改,然后通过MailID获取该电子邮件的MessageBody 。其中“MailItems”和“DetaliView”模块由不同的团队开发,但它们之间的共同预期消息是MailID 。

于 2009-07-01T12:07:22.863 回答
3

查看 Prism 的事件聚合器

于 2009-07-01T11:15:46.867 回答