【问题标题】:How to modules in Prism (CAL) communicate with each other?Prism (CAL) 中的模块如何相互通信?
【发布时间】:2010-11-07 07:10:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: wpf mvvm design-patterns prism


    【解决方案1】:

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

    例子:

    桌面电子邮件应用程序:

    模块:

    • 邮件项目(MailID、Subject、Sender、SentDate..etc)
    • 详细视图(消息正文)

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

    【讨论】:

      【解决方案2】:

      查看 Prism 的 event aggregator

      【讨论】:

        猜你喜欢
        • 2013-05-03
        • 1970-01-01
        • 2012-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-22
        相关资源
        最近更新 更多