DevExpress MVVM Framework. Interaction of ViewModels. Messenger

学习记录:

学习地址:https://community.devexpress.com/blogs/wpf/archive/2013/12/13/devexpress-mvvm-framework-interaction-of-viewmodels-messenger.aspx

DevExpress MVVM 框架通过 Messenger 实现跨模块间交互。这些模块间不需要相互引用,降低了模块间的耦合度。

下面是演示示例:

假如一个数据库数据会被多个不同的模块修改,其中某个模块需要知道发生的这些修改,这时候就可以使用  Messenger 方便地实现该功能。

首先需要创建一个消息

   public enum MessageType { Added, Deleted, Changed }
   public class Message {
       public MessageType MessageType { get; private set; }
       public object RecordID { get; private set; }
       public Message(object recordID, MessageType messageType) {
           RecordID = recordID;
           MessageType = messageType;
       }
   }

然后在模块A中订阅该消息:

public class ModuleA {
    public ModuleA() {
        Messenger.Default.Register<Message>(this, OnMessage);
    }
    void OnMessage(Message message) {
        switch(message.MessageType) {
            case MessageType.Added:
                //...
                break;
            case MessageType.Changed:
                //...
                break;
            case MessageType.Deleted:
                //...
                break;
            default:
                throw new NotImplementedException();
        }
    }
}

主要订阅实现是通过  Messenger 的Register 方法实现的。

模块B中对数据进行操作,并发送操作结果的消息通知:

public class ModuleB {
    void SendMessage() {
        Messenger.Default.Send(new Message(0, MessageType.Added));
    }
}

如果有更多的模块,比如模块C,模块D...也需要对数据进行处理,只需要使用 ModuleB 中类似的 SendMessage 方法即可。

Demo源码 :https://github.com/DevExpress-Examples/how-to-use-the-messenger-in-a-crud-application-e5001/archive/16.2.5+.zip

原文地址:https://www.cnblogs.com/runningRain/p/13731385.html