学习记录:
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 方法即可。