繁体   English   中英

使用WPF中的Eventaggregator从视图模型到视图模型的PRISM MEF通信

[英]PRISM MEF communication from viewmodel to viewmodel by using Eventaggregator in wpf

我正在尝试通过使用WPF和PRISM创建WPF应用程序。 我也在使用MEF和mvvm。 是否可以有两个可以使用事件aggregastor相互通信的视图模型? 例如。 在viewmodel A中发布并在Viewmodel B中订阅? 如果是这样怎么办? 我已经构建了一个包含多个视图模型的程序,其中一些视图模型应该相互通信,但是以某种方式,如果我使用eventaggregator在Viewmodel A中进行发布,则视图模型B中的A订阅将永远不会被识别为属于同一eventaggregator,因此我无法更新连接到视图模型B的视图。

这是定义事件聚合器的基本关键步骤

(1)创建事件汇总

公共类YourEvent:CompositePresentationEvent {

}

(2)发布者vm

eventAggregator.Get()。Publish(object);

(3)订阅Vm

YourEvent eventobj = eventAggregator.Get();

    if (subscriptionToken != null)
    {
        eventobj.Unsubscribe(subscriptionToken);
    }

    subscriptionToken = eventobj.Subscribe(YourEventHandler, ThreadOption.UIThread, false, yourfun);

您是否同时具有ViewModel“ B”和ViewModel“ A”的实例? 您是否在订阅代码运行之前发布事件? 他们是否都发布/订阅同一事件?

EventAggregator.GetEvent(Of MyEventType).Subscribe(Sub()

                                                   End Sub)

唯一可能性是尚未加载ViewModel“ B”或尚未订阅该事件。 如果不正确,建议您粘贴一些代码段。

您是否正在使用WeakReference(弱订阅)进行订阅? 如果是这样,并且您的订户未在其他地方引用,则在您发布事件之前,它可能会被垃圾回收并消失。

EventAggregator始终相同,您必须将其传递给每个Viewmodel。 Prism和MEF可以为您做到这一点:

  1. 您可以使用PRISM的Unity在构造函数中加载EventAggregator

  2. 您可以使用MEF注入EventAggregator的引用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM