【问题标题】:How do you expose a viewmodel from a different module to a controller in another module?如何将不同模块中的视图模型暴露给另一个模块中的控制器?
【发布时间】:2013-10-27 14:05:35
【问题描述】:

我有一个 StockModule 和一个 PurchaseModule。当我收到新的购买时,我会将其添加到数据库中的库存模型中。

我的问题是我的 StockModule 的 ViewModel 中有一个 ObservableCollection stockList,而添加库存的控制器在 PurchaseModule 中。我不知道我应该如何告诉 StockModule 中的 ViewVodel 我已经更新了 stockList。

我在 wpf 和 prism 中统一使用数据绑定。在模块中更新视图很容易,但我还没有找到在两个模块之间进行更新的方法。

我应该在初始化 PurchaseModule 时传递对 StockController 的引用吗?我不想这样做,因为这看起来耦合得太紧了。

【问题讨论】:

    标签: c# wpf mvvm unity-container prism


    【解决方案1】:

    您应该使用 Marlon 的 Mediator 或 Prism 的 EventAggregator 之类的东西来实现 ViewModel 或组件之间的通信(它们可以在单个模块中,也可以跨多个模块)。

    在您的情况下,PurchaseModule 中的 ViewModel 将通过 Mediator/EventAggregator 发布一条消息(例如,StockAdded),然后您来自 StockModule 的 ViewModel 将侦听此消息并更新其数据并生效视图也是如此。

    更多关于调解器的阅读:http://marlongrech.wordpress.com/2009/04/16/mediator-v2-for-mvvm-wpf-and-silverlight-applications/

    棱镜事件聚合器:http://msdn.microsoft.com/en-us/library/ff921122.aspx

    【讨论】:

    • 我已经使用了 Prism 的 EventAggregator,但没有考虑在模块之间使用它。哦!我现在就试试这个。
    • 它就像一个魅力。那是我的愚蠢。谢谢!
    • 酷。很高兴,它确实帮助了你:)
    猜你喜欢
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2021-08-05
    相关资源
    最近更新 更多