相关文章推荐
求醉的大蒜  ·  java.lang.illegalargum ...·  1 年前    · 
爱旅游的斑马  ·  JavaScript ...·  1 年前    · 
InitializeComponent ( ) ; // 1、通过recipient进行区分,发送的时候需要指类型,不指定的话,所有此种类型的注册都可以接收消息 Messenger . Default . Register < string > ( this , ( o ) = > } ) ; // 2、通过token进行区分 Messenger . Default . Register < string > ( this , "token" , ( o ) = > } ) ; // 3、receiveDerivedMessagesToo参数控制是否接收派生类的消息,true时接收派生类的消息;false时不接收派生类消息 Messenger . Default . Register < IA > ( this , false , ( o ) = > } ) ; interface IA void Show ( ) ; public class B : IA public void Show ( ) throw new NotImplementedException ( ) ;
        public ICommand TestCommand
                if (_testCommand == null)
                    _testCommand = new RelayCommand(() =>
                        // 1、常规发送信息
                        Messenger.Default.Send("123");
                        Messenger.Default.Send("123", "token");
            			// 2、指定接口或其派生类接收消息,判断receiveDerivedMessagesToo参数
            			Messenger.Default.Send<IA>(new B());
            			Messenger.Default.Send<B>(new B());
            			// 3、指定相应类型接收这个消息
            			Messenger.Default.Send<string, MainWindow>("123");
            		});
                return _testCommand;

2.NotificationMessage

作用:将传递的消息封装为NotificationMessage对象

非泛型类:
在这里插入图片描述
泛型类:
在这里插入图片描述
注册:

        public MainWindow()
            InitializeComponent();
            Messenger.Default.Register<NotificationMessage>(this, msg =>
                //if (msg.Target is MainWindow)
                if (msg.Sender is ViewModelBase)
            });
            Messenger.Default.Register<NotificationMessage<int>>(this, msg =>
                //if (msg.Target is MainWindow)
                if (msg.Sender is ViewModelBase)
            });
            Messenger.Default.Register<NotificationMessage<string>>(this, msg =>
                //if (msg.Target is MainWindow)
                if (msg.Sender is ViewModelBase)
                if (msg.Content == "")
        public ICommand TestCommand
                if (_testCommand == null)
                    _testCommand = new RelayCommand(() =>
            			// 触发NotificationMessage类型的消息
            			Messenger.Default.Send<NotificationMessage>(new NotificationMessage(new B(), "123"));
            			Messenger.Default.Send<NotificationMessage<int>>(new NotificationMessage<int>(this, 1, "123"));
            		});
                return _testCommand;

3.NotificationMessageAction

作用:将传递的消息封装为NotificationMessageAction 对象,支持Action回调

        public MainWindow()
            InitializeComponent();                       									
            Messenger.Default.Register<NotificationMessageAction<bool>>(this, msg =>
                var rresult = MessageBox.Show(msg.Notification, "消息对话框", MessageBoxButton.YesNo, MessageBoxImage.Question);
                //执行Send里面的回调函数
                msg.Execute(rresult == MessageBoxResult.Yes);
            });
        public ICommand TestCommand
                if (_testCommand == null)
                    _testCommand = new RelayCommand(() =>
                        NotificationMessageAction<bool> nma = new NotificationMessageAction<bool>("123", (r) =>
                        	//执行Registerzh
                        });
                        Messenger.Default.Send<NotificationMessageAction<bool>>(nma);
                    });
                return _testCommand;

4.PropertyChangedMessage

作用:属性值变化时就会触发注册的函数。
需要将属性通知RaisePropertyChanged中的broadcast参数设为true。
在这里插入图片描述

        public MainWindow()
            InitializeComponent();                       									
            Messenger.Default.Register<PropertyChangedMessage<string>>(this, (o) =>
                // 区别一下哪个属性进行了变化
                if (o.PropertyName == "MyProperty")
            });
        public ICommand TestCommand
                if (_testCommand == null)
                    _testCommand = new RelayCommand(() =>
                        this.MyProperty = "123";
                        this.VVV = "123";
                    });
                return _testCommand;
		private string myVar;
		//需要将RaisePropertyChanged中的broadcast参数设为true;
        public string MyProperty
            get { return myVar; }
                myVar = value;
                this.RaisePropertyChanged<string>("MyProperty", "1", "2", true);
        private string _fvv;
        public string VVV
            get { return _fvv; }
                _fvv = value;
                this.RaisePropertyChanged<string>("VVV", "1", "2", true);
                    简介GalaSoft.MvvmLight.Messaging:消息类,提供全局的消息通知,可以理解为全局的Event事件, 主要对象:MessengerNotificationMessagesh
				
MVVM Light Messenger使用 参见文章:https://msdn.microsoft.com/zh-cn/magazine/dn745866.aspx MVVM Light Messenger 旨在通过简单的前提来精简此场景:任何对象都可以是接收端;任何对象都可以是发送端;任何对象都可以是消息。 使用如下: 1.使用默认的 Messenger 并检查发送端 publ...
主要命名空间: GalaSoft.MvvmLight:最顶层的命名空间,MvvmLight的主体,核心功能 主要对象:ObservableObject、ViewModelBase(实现数据通知相关的内容)、ICleanup GalaSoft.MvvmLight.Command:主要包含依赖命令的定义 主要对象:RelayCommand、RelayCommand<> 对Icommand的封装 GalaSoft.Mvv
当我们使用MVVM开发模式进行开发时,ViewModel之间的通信常常是很头疼的事情,好在MVVM Light提供了Messenger类可以轻松的在ViewModel之间传递消息。 Messenger Messenger 其他类成员可以通过Register 方法 来建立与Messenger的联系,注册时包含当收到Message的时候要执行的方法。当使用Send方法时,注册的相关的方法将会被...
Messenger中文解释为信使的意思,顾名思义,在MvvmLight中,它的主要作用是用于View和ViewModel、ViewModel和ViewModel之间的通信。 考虑以下场景: 现在有一个主窗体,主窗体上有一个按钮,点击按钮的时候,弹出一个子窗体,用于实时的往主窗体上添加新的项。 这时候Messenger就发挥其强大的威力了。 Messenger类的主要交...
MVVM Light 是一个开源的 MVVM (Model-View-ViewModel) 框架,用于开发 Windows 平台的应用程序。它的主要优点在于简洁易用、轻量级,支持 WPF、Silverlight、Windows Phone、Windows 8/8.1、Windows 10 UWP 等平台。 下面是一个简单的 MVVM Light 使用教程: 1. 首先,安装 MVVM Light 框架。可以通过 NuGet 包管理器安装,命令如下: Install-Package MvvmLight 2. 在项目中添加一个 ViewModel 类。这个类会绑定到 View 上。 3. 编写 View 的 XAML 代码。在根元素上添加 DataContext 属性绑定到 ViewModel。 4. 编写 ViewModel 类中的逻辑代码。这些代码会更新 View 的状态。 5. 在 View 的 XAML 代码中添加绑定。例如,将一个文本框的 Text 属性绑定到 ViewModel 中的一个属性上。 6. 在 ViewModel 中使用命令来处理 View 上的用户交互。 7. 按照需要使用其他 MVVM Light 的功能,例如消息传递、导航、本地化等。 最后,我需要提醒你 MVVM 是一种模式,不同的框架可能有不同的实现,每种框架都有它的优缺点,需要根据自己的需求来选择合适的框架.