> 文章列表 > MVVMLight中,消息注册和消息通知

MVVMLight中,消息注册和消息通知

MVVMLight中,消息注册和消息通知

    本文讲述MVVMLight中,消息注册和消息通知;

    MVVMLight的消息注册机制是一个静态变量在App中全局广播与注册;

    MVVMLight中消息通知机制的对外实现:框架下对所有对象提供单例Messenger工具类,任何需要订阅、被订阅(发送、接收事件消息)的对象都通过对Messenger进行调用实现;避免了订阅方与被订阅方必须实例接触的问题了;调用方式上,在发送和接收用如下参数定义方式实现;

**************************************************************************************************************

    下面我们来看消息注册和通知的方法的详细讲解:Register(注册订阅事件)、Send(发送消息),如下说明:

/// <summary>
/// 注册订阅事件
/// </summary>
/// <typeparam name="TMessage">传参类型</typeparam>
/// <param name="recipient">订阅实例</param>
/// <param name="token">发送与接收定义的key值</param>
/// <param name="action">订阅事件触发的action</param>
/// <param name="keepTargetAlive">持续控制实例存在,防止被回收清除</param>
public virtual void Register<TMessage>(object recipient,object token,Action<TMessage> action,bool keepTargetAlive = false)/// <summary>
/// 被订阅方触发事件
/// </summary>
/// <typeparam name="TMessage">传参类型</typeparam>
/// <param name="message">参数数据</param>
/// <param name="token">key</param>
public virtual void Send<TMessage>(TMessage message, object token)

**************************************************************************************************************

    好了,下面我们以一个示例来进行简单的说明:

    MVVMLight 事件注册,可用于不同模块之间的通讯,触发函数事件等;
    约定好了一个令牌(这里是“SearchStudents”),我在此注册该令牌,有该令牌的消息时我会收到这个通知;
Messenger.Default.Register<bool>(this, "SearchStudents", SearchStudents);//消息注册
//SearchStudents(bool obj):消息触发时,需要执行的函数
private void SearchStudents(bool obj)
{SearchStudentsDataCmd.Execute(searchType);
}
    消息通知:是全局广播的,这个消息发送了个广播,广播的令牌为"SearchStudents",这是个令牌! 跟一个暗语一样,哈哈!只要对的上的就可以收到这个消息,所以我们跟接收者(也就是编写View的工程师)进行约定。到时候接收消息就靠这个令牌了。
 

//发送消息
Messenger.Default.Send<bool>(true, "SearchStudents");
注销指定的消息
Messenger.Default.Unregister<object>(this, "SearchStudents");

**************************************************************************************************************