![](/img/trans.png)
[英]RadBusyIndicator not showing PRISM/MEF/WPF from ViewModel
[英]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可以为您做到这一点:
您可以使用PRISM的Unity在构造函数中加载EventAggregator
您可以使用MEF注入EventAggregator的引用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.