MVVM模式的消息传递机制:Messenger.Default.Send 和 Register
  4CCAvn5kOf6A 2024年02月27日 36 0
是在MVVM中用来传递消息的一种方式。它是在MVVMLight框架中提供的一个实现了IMessenger接口的类,可以用来在ViewModel之间、ViewModel和View之间传递消息。
Send 接受一个泛型参数,表示要发送的消息内容。
Register 方法用于注册某个对象接收消息。
public virtual void Send<TMessage>(TMessage message)
{
    SendToTargetOrType(message, null, null);
}

public virtual void Send<TMessage, TTarget>(TMessage message)//指定消息的目标类型TTarget。目标类型可以是任何类型,包括ViewModel、View、Control等。即接收方是属于TTarget类的
{
     SendToTargetOrType(message, typeof(TTarget), null);
}

public virtual void Send<TMessage>(TMessage message, object token)//发送消息时,可以指定一个字符串类型的标识符,用于区分不同的消息。
{
     SendToTargetOrType(message, null, token);
}
public virtual void Register<TMessage>(object recipient, Action<TMessage> action)//第一个参数是要注册的对象,第二个参数是一个 Action 委托,表示接收到消息后要执行的操作
{
     Register(recipient, null, receiveDerivedMessagesToo: false, action);
}

public virtual void Register<TMessage>(object recipient, bool receiveDerivedMessagesToo, Action<TMessage> action)//第二个参数是一个布尔值,指示是否接收派生类型的消息。false表示只接收TMessage类型的消息。
{
 Register(recipient, null, receiveDerivedMessagesToo, action); } public virtual void Register<TMessage>(object recipient, object token, Action<TMessage> action) { Register(recipient, token, receiveDerivedMessagesToo: false, action); }

 

1. 举例:Send<TMessage, TTarget>(TMessage message)

public class MyMessage
{
    public string Text { get; set; }
}

// 发送消息
Messenger.Default.Send<MyMessage, MyViewModel>(new MyMessage { Text = "Hello World!" });

// 接收消息
Messenger.Default.Register<MyViewModel>(this, msg => {
    Console.WriteLine(msg.Text);
}); 

2. 举例:Send<TMessage>(TMessage message, object token)

// Define a message class
public class MyMessage
{
    public string MessageText { get; set; }
}

// Register a recipient to receive MyMessage with a specific token
Messenger.Default.Register<MyMessage>(this, "myToken", message =>
{
    Console.WriteLine("Received message: " + message.MessageText);
});

// Send a MyMessage with the same token
var myMessage = new MyMessage { MessageText = "Hello world!" };
Messenger.Default.Send(myMessage, "myToken");

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年02月27日 0

暂无评论

推荐阅读
  2fqsT8Yu1xAt   12小时前   4   0   0 .NET
  OaxsuEwyxUZi   2天前   5   0   0 .NET
4CCAvn5kOf6A