MVVM模式的消息传递机制:Messenger.Default.Send 和 Register

锦通  金牌会员 | 2024-5-10 11:13:53 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 890|帖子 890|积分 2670

是在MVVM中用来传递消息的一种方式。它是在MVVMLight框架中提供的一个实现了IMessenger接口的类,可以用来在ViewModel之间、ViewModel和View之间传递消息。Send 接受一个泛型参数,表示要发送的消息内容。Register 方法用于注册某个对象接收消息。
  1. public virtual void Send<TMessage>(TMessage message)
  2. {
  3.     SendToTargetOrType(message, null, null);
  4. }
  5. public virtual void Send<TMessage, TTarget>(TMessage message)//指定消息的目标类型TTarget。目标类型可以是任何类型,包括ViewModel、View、Control等。即接收方是属于TTarget类的<br>{
复制代码
  1.      SendToTargetOrType(message, typeof(TTarget), null);
  2. }
  3. public virtual void Send<TMessage>(TMessage message, object token)//发送消息时,可以指定一个字符串类型的标识符,用于区分不同的消息。
  4. {
  5.      SendToTargetOrType(message, null, token);
  6. }
复制代码
  1. public virtual void Register<TMessage>(object recipient, Action<TMessage> action)//第一个参数是要注册的对象,第二个参数是一个 Action 委托,表示接收到消息后要执行的操作
  2. {
  3.      Register(recipient, null, receiveDerivedMessagesToo: false, action);
  4. }
  5. public virtual void Register<TMessage>(object recipient, bool receiveDerivedMessagesToo, Action<TMessage> action)//第二个参数是一个布尔值,指示是否接收派生类型的消息。false表示只接收TMessage类型的消息。
复制代码
  1. <em id="__mceDel">{</em>
复制代码
  1. <em id="__mceDel">      Register(recipient, null, receiveDerivedMessagesToo, action);
  2. }
  3. public virtual void Register<TMessage>(object recipient, object token, Action<TMessage> action)
  4. {
  5.       Register(recipient, token, receiveDerivedMessagesToo: false, action);
  6. }</em>
复制代码
 
1. 举例:Send(TMessage message)
  1. public class MyMessage
  2. {
  3.     public string Text { get; set; }
  4. }
  5. // 发送消息
  6. Messenger.Default.Send<MyMessage, MyViewModel>(new MyMessage { Text = "Hello World!" });
  7. // 接收消息
  8. Messenger.Default.Register<MyViewModel>(this, msg => {
  9.     Console.WriteLine(msg.Text);
  10. });
复制代码
2. 举例:Send(TMessage message, object token)
  1. // Define a message class
  2. public class MyMessage
  3. {
  4.     public string MessageText { get; set; }
  5. }
  6. // Register a recipient to receive MyMessage with a specific token
  7. Messenger.Default.Register<MyMessage>(this, "myToken", message =>
  8. {
  9.     Console.WriteLine("Received message: " + message.MessageText);
  10. });
  11. // Send a MyMessage with the same token
  12. var myMessage = new MyMessage { MessageText = "Hello world!" };
  13. Messenger.Default.Send(myMessage, "myToken");
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表