小闵的院子

技术之家

导航

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方法里取消。

  

posted on 2010-09-24 21:48  小闵  阅读(1747)  评论(1编辑  收藏  举报