它是如何工作的
ObservableRecipient设计出来是用来作为viewmodel的基础(或者说基对象)的,它也使用了IMessenger的特性,因为它为IMessenger提供了内置支持。特别地:
1、它有一个无参的构造函数和一个接受IMessenger实例的构造函数,被用作依赖注入。它还暴露了一个Messenger属性,可用来在viewmodel中收发消息。如果使用了无参构造函数,WeakReferenceMessenger.Default实例将会被分配给Messenger属性。
2、 它暴露了IsActive属性以激活(Activate)/禁用(Deactivate)viewmodel。在这种情况下,激活意味着viewmodel被标记为正在使用,例如,它将开始监听已注册的消息,执行其他的设置操作等。有两个相关的方法OnActivated 和 OnDeactivated,在属性改变值时,它们会被调用。默认情况下,OnDeactivated会自动从所有已注册的消息中注销当前实例。为了获得最佳效果和避免内存泄漏,建议使用OnActivate来注册消息,使用OnDeactivate来做清理操作。这种模式允许viewmodel启停多次,同时可以安全地收集,而不会在每次停用的时候产生内存泄漏的风险。默认情况下,OnActivate会自动注册所有通过IRecipient<TMessage>接口定义的消息处理器。
3、它暴露了Broadcast<T>(T, T, string)方法,该方法通过IMessenger实例(可以从Messenger属性获得)发送PropertyChangedMessage<T>消息。这可以用来轻松传播viewmodel中的变化,而不需要手动地检索Messenger实例来使用。该方法通过各种SetProperty方法的重载来使用,这些方法还有一个附加的bool broadcast属性,用于指示是否也发送消息。
原文地址:http://www.cnblogs.com/cdaniu/p/16852620.html