Prism之事件IEventAggregator
event事件,相信大家都知道有什么作用吧,主要用于在特定情况触发下,处理相关操作,它是一个异步处理过程,因此prism事件一般使用在需要异步处理的情况下。
Prism的事件IEventAggregator是全局性的,什么意思?以前我们开发项目,不经常会用到全局变量吗,这里Prism使用容器,通过方法
protected void RegisterTypeIfMissing(Type fromType, Type toType, bool registerAsSingleton);
来定义全局变量,它可是单例的哟,保证了唯一性,你可以通过ServiceLocaor.Current.GetInstance<IEventAggregator>()在你项目的任何地方获取唯一实例。
事件采用订阅、发布原理实现。
事例代码如下:
(1)订阅:ServiceLocaor.Current.GetInstance<IEventAggregator>().GetEvent<myEvent>().Subscribe(myMethod);
//参数是触发者传送的参数,调用者与被调用者参数类型要保持一致。
public void myMethod(object o)//这个方法一定是公有的,不然事件触发时找不到,会报错。
{
//...
}
public class myEvent: CompositePresentationEvent<object>{} //CompositePresentationEvent是prism提供的接口。
(2)发布:ServiceLocaor.Current.GetInstance<IEventAggregator>().GetEvent<myEvent>().Publish(new object());
注:记得在事件触发完后,如果不再需要触发,或是创建了另一个实例也调用这个事件,一定要取消订阅哟,不然可能会被二次调用。取消方式如下:
ServiceLocaor.Current.GetInstance<IEventAggregator>().GetEvent<myEvent>().Unsubscribe(myMethod);
一般在myMethod方法里取消。