MVVM中的Messenger

通过Mvvm Light源码我们可以知道Messenger的实现细节,如果你现在还不能理解这些代码也没关系,很多东西理解起来远比使用起来难,Messenger也是如此,它使用起来很简单,由于Messenger只公开了一些消息注册和发送方法,使用者一看便知方法的功能,而只需关注要发送的数据和接收的对象就可以了。

1、发送:

1 Messenger.Default.Send<string>("StartRecordVis");//开始录制可见光,发送消息

2、接收:

 1 1 Messenger.Default.Register<string>(this, BDRecordVideo);// 开始录制
 2  2 private void BDRecordVideo(string obj)
 3  3         {
 4  4             switch (obj)
 5  5             {
 6  6                 case "StartRecordVis":
 7  7                     this.visVideo.StartCapture("vis");//录制可见光
 8  8                     break;
 9  9                 case "StartRecordInf":
10 10                     this.infVideo.StartCapture("inf");//录制红外
11 11                     break;
12 12             }
13 13         }

3、清理

Messenger通过全局的字典集合来保存弱引用关系,因此在对象不使用时,我们要养成清理的习惯,调用Unregister来从字典集合中移除引用关系。

1 Messenger.Default.Unregister(this);

原文地址:https://www.cnblogs.com/LY-HeroesRebor/p/9024700.html

时间: 2024-07-31 14:32:48

MVVM中的Messenger的相关文章

Messenger和MVVM中的View Services

在前面的文章IoC容器和MVVM中, 介绍了IoC容器如何在大量用户类中帮助创建和分配用户类的实例.本文将介绍IoC容器如何帮助应用程序解耦,比如那些根据MVVM模式开发的应用.此模 式广泛应用在基于XAML的应用程序(Silverlignt, WPF, Windows Phone, Windows 8)中,因为此模式与数据绑定系统和用于这类程序设计的工具匹配的很好,尤其是在VS 设计器和Blend中. 在典型的XAML程序中,开发者利用数据绑定系统声明一个XAML UI元素的属性和应用程序中其

在MVVM中使用PasswordBox控件

在MVVM中使用PasswordBox控件,碰到一个问题.由于**PasswordBox.Password**属性并不是一个依赖属性,所以无法将其作为Binding的目标. # 使用附加属性的解决方案 ![Password Demo.gif](http://upload-images.jianshu.io/upload_images/140233-dbd415eb4cf9aeb2.gif) **思路:**定义两个依赖属性**Attach**和**AttachPassoword** Attatch

WPF: 在MVVM中使用Navigtaion

Navigation可以很方便的在页面间进行切换,但是在MVVM模式下,使用Naviation会有一个问题,切换的逻辑需要在ViewModel层完成,但是Navigation需要知道页面的实例或者Uri才能进行切换,那我们如何在ViewModel与UI分离的情况下,用Navigation完成页面的切换呢? 假如有一个程序如下所示,点击Switch之后会从Summary Page切换到另一个页面Detail Page: 在MVVM中,我们需要有三个ViewModel,一个是SummaryViewM

MVVM中的RelayCommand与AsyncCommand

之前发过一个AsyncCommand实现的文章,该命令用于MVVM中的异步操作. 实际上在在MVVM模式中,RelayCommand可能更加常用. 由于两种命令均实现ICommand接口,因此我们将共通的部分提取出来作为抽象基类CommandBase. public abstract class CommandBase : ICommand { public event EventHandler CanExecuteChanged { add { CommandManager.RequerySu

WPF MVVM中在ViewModel中关闭或者打开Window

这篇博客将介绍在MVVM模式ViewModel中关闭和打开View的方法. 1. ViewModel中关闭View public class MainViewModel { public DelegateCommand<Window> CloseWindowCommand { get; private set; } public MainViewModel() { CloseWindowCommand = new DelegateCommand<Window>(CloseWindo

Android中通过Messenger与Service实现进程间双向通信

Android中的Service和其调用者既可以在同一个App中,也可以在不同的App.如果Service在App1中,而调用Service的客户端在App2中,那么我们就可以用Service实现进程间的相互通信.本文将介绍如何通过bindService和Messenger实现进程间通信(IPC),如果对bindService绑定服务和Binder不熟悉,可参见<Android中bindService的使用及Service生命周期>,理解该博文是本文的基础. 让Service实现与其他进程通信

MVVM中数据验证之 ViewModel vs. Model

                                                  MMVM模式示意图. View绑定到ViewModel,然后执行一些命令在向它请求一个动作.而反过来,ViewModel跟Model通讯,ViewModel告诉Model更新来响应UI. 这样便使得为应用构建UI外观设计相对独立,也非常容易替换UI设计("随心所欲"设计你的界面).同时,当UI和功能越来越松耦合的时候,功能的可测试性就越来越强.   在两个地方验证: 1.在ViewMod

MVVM中写代码的模块区域划分

之前使用MVVM的方式一段时间 + 前天认真的划分设计文档中的模块 = 一种想要强烈的现在使用MVVM的方式 版权声明:本文为博主原创文章,未经博主允许不得转载.

WPF MVVM 中怎样在ViewModel总打开的对话框在窗体之前

今天在WPF的项目中,写打印插件,在ViewModel中对需要弹出打印对话框,而对话框如果没有Owner所属的时候经常会被当前应用程序遮住,导致我都不知道到底弹出来没有! 参照:http://www.codeproject.com/Articles/20347/WebControls/后,果断顺利通过. 第一步定义WindowWrapper类:实现System.Windows.Forms.IWin32Window接口 1 /// <summary> 2 /// 句柄转换IWin32Window