学习记录:

学习地址: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

DevExpress MVVM Framework. Interaction of ViewModels. Messenger的更多相关文章

  1. DevExpress MVVM<1>

    DevExpress MVVM 概念 模型 -定义数据和您的业务逻辑. 视图 -指定UI,包括绑定到ViewModel中的属性和命令的所有可视元素(按钮,标签,编辑器等). ViewModel-连接模 ...

  2. DevExpress.Mvvm.Free

    DevExpress MVVM Framework is a set of components helping to work in the Model-View-ViewModel pattern ...

  3. devexpress entity framework 与 asp.net mvc的坑

    最近在做一个使用ASP.NET MVC DEVEXPRESS和EF的OA模块 遇到不少问题这里记录一下: 1 如果项目中存在多个上下文类(DBContext的派生类),在做数据迁移的时候需要在不同目录 ...

  4. devexpress WinForms MVVM

    WinForms MVVM This section is dedicated to the Model-View-ViewModel (MVVM) architectural pattern. Yo ...

  5. Messenger在MVVM模式中的应用

    Messenger在MVVM模式中的应用 Messenger在MVVM中应用的前提 我们知道在MVVM架构中,系统平台的Silverlight客户端界面开发和业务逻辑已经被分开,XAML是SL的主要部 ...

  6. DevExpress 编译成功的 dll

    DevExpress 编译成功的 dll 附注册方法 其它的有些文件没有,如: DevExpress.EasyTest 这个程序集找不到 希望有的朋友可以分享一下, 安装程序集 通常,将程序集安装到G ...

  7. MVVM模式的几个开源框架

    原文:MVVM模式的几个开源框架 实现MVVM的框架有很多,如: • MVVM Light Toolkit: http://mvvmlight.codeplex.com • Microsoft Pri ...

  8. DevExpress WPF v19.1新版亮点:Gantt/Map控件新功能

    行业领先的.NET界面控件DevExpress 日前正式发布v19.1版本,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WPFv19.1中新增的一些控件及部分 ...

  9. DevExpress WPF v18.2新版亮点(四)

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress WPF v18.2的新功 ...

  10. DevExpress v18.1新版亮点——WPF篇(四)

    用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WPF v18.1 的新功能,快来下载试用新版本!点击下载& ...

随机推荐

  1. DOM元素高度获取踩坑

    前情 最近在开发一个需求,需要做一个滚动列表展示当前中奖用户,但是列表每一项高度又不是固定的,每次滚动前需要先获取当前要滚动的块是多高才知道要滚动多少. 坑位 在开发这个滚动列表的时候发现滚着滚着就会 ...

  2. rabbitmq3.7.3 发布了一个新的 exchange x-random

    direct exchange 同一个 routing key 可以绑定多个 queue,当给这个routing key发消息时,所有 queue 都会投递.这个行为对于一些场景不适用,有时我们希望只 ...

  3. 权限控制(acl,rbac)

    目录 一.权限控制(acl,rbac) 一.权限控制(acl,rbac) 将来我们编写的项目主要分成两类:公司内部项目和互联网项目 公司内部项目 使用RBAC-基于角色的访问控制 什么是RBAC? R ...

  4. Linux 添加开机自启动

    rc.local 方式 一.& 在 Linux 命令后加上 &  可以在后台运行 二.nohup 对 SIGHUP 信号免疫,对 SIGINT 信号不免疫,可用 shopt | gre ...

  5. FFmpeg命令行选项

    如下内容取自官网文档"Documentation-ffmpeg"和"Documentation-ffmpeg-all" 1 帮助信息 如下选项适用于 ff 系列 ...

  6. vue引入element-ui插件 “export ‘default‘ (imported as ‘Vue‘) was not found in ‘vue‘

    注意:出现该问题的原因主要是使用的Vue版本与Element-UI的版本不匹配. Vue.Vue-cli与Element-UI之间版本的正确的匹配关系是: Vue库版本 Vue-cli库版本 Elem ...

  7. [转]Node.js安装详细步骤教程(Windows版)

    什么是Node.js? 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js是一个基于 Chrome V8 引擎的 JavaScript 运行环境: Node.js使用 ...

  8. 即时通讯框架MobileIMSDK的H5端开发快速入门

    ► 相关链接: ① MobileIMSDK-H5端的详细介绍 ② MobileIMSDK-H5端的开发手册new(* 精编PDF版) 一.技术准备 您是否已对Web端即时通讯技术有所了解? 1)新手入 ...

  9. 深度学习基础理论————DeepSpeed

    DeepSpeed原理 DeepSpeed 是由微软开发的一种深度学习优化库,专为高性能训练和推理而设计,尤其适用于大规模深度学习模型(如 GPT 系列.BERT 等).它通过一系列技术和优化策略,帮 ...

  10. C++类相互包含

    1. 两个类需要相互包含的情景 在观察者模式中,气象站的数据送给某些布告牌. 气象站要知道通知哪些布告牌,所以气象站类至少有一个布告牌类型的链表. 布告牌需要把自己注册到气象站类,告诉气象站类自己已经 ...