wpf – 如何使用EventAggregator和Microsoft Prism库从订阅方法
发布时间:2020-12-14 02:46:16 所属栏目:Windows 来源:网络整理
导读:我正在使用MVVM和Microsoft Prism库来开发 WPF项目.所以,当我需要通过类进行通信时,我使用类Microsoft.Practices.Prism.MefExtensions.Events.MefEventAggregator,我发布事件和订阅方法如下: 要发布: myEventAggregator.GetEvent MyEvent()出版(myParams)
我正在使用MVVM和Microsoft Prism库来开发
WPF项目.所以,当我需要通过类进行通信时,我使用类Microsoft.Practices.Prism.MefExtensions.Events.MefEventAggregator,我发布事件和订阅方法如下:
要发布: myEventAggregator.GetEvent< MyEvent>()出版(myParams) 认购: myEventAggregator.GetEvent< MyEvent>()订阅(MySubscribedMethod). 但我的问题是:有没有办法在发布事件后从“订阅方法”返回一些数据? 解决方法
据我所知,如果所有事件订阅者都使用ThreadOption.PublisherThread选项(这也是默认选项),则事件是同步执行的,订阅者可以修改EventArgs对象,因此您可以在发布者中使用
myEventAggregator.GetEvent<MyEvent>().Publish(myParams) if (myParams.MyProperty) { // Do something } 订阅者代码如下所示: // Either of these is fine. myEventAggregator.GetEvent<MyEvent>().Subscribe(MySubscribedMethod) myEventAggregator.GetEvent<MyEvent>().Subscribe(MySubscribedMethod,ThreadOption.PublisherThread) private void MySubscribedMethod(MyEventArgs e) { // Modify event args e.MyProperty = true; } 如果您知道应始终同步调用该事件,则可以为事件创建自己的基类(而不是CompositePresentationEvent< T>),它会覆盖Subscribe方法,并且只允许订阅者使用ThreadOption.PublisherThread选项.它看起来像这样: public class SynchronousEvent<TPayload> : CompositePresentationEvent<TPayload> { public override SubscriptionToken Subscribe(Action<TPayload> action,ThreadOption threadOption,bool keepSubscriberReferenceAlive,Predicate<TPayload> filter) { // Don't allow subscribers to use any option other than the PublisherThread option. if (threadOption != ThreadOption.PublisherThread) { throw new InvalidOperationException(); } // Perform the subscription. return base.Subscribe(action,threadOption,keepSubscriberReferenceAlive,filter); } } 然后,您不是从CompositePresentationEvent派生MyEvent,而是从SynchronousEvent派生它,它将保证您将同步调用该事件,并且您将获得修改后的EventArgs. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
推荐文章
站长推荐
- win10 uwp 使用 Matrix3DProjection 进行 3d 投影
- group-policy – 通过GPO设置二进制注册表设置
- Windows Server 2016-命令行方式管理Windows服务
- Jupyter从Windows的Cmd线
- opengl – Win32的CoreImage
- 从Windows服务播放wave文件(C#)
- 数据绑定 – Windows应用商店应用中条件样式(或S
- Windows工作流(WF):将一个活动的输出作为序列中
- 为什么VirtualBox找不到名为Windows_7的注册机器
- Win7 Eclipse 搭建spark java1.8环境:WordCount
热点阅读