是在MVVM中用來傳遞消息的一種方式。它是在MVVMLight框架中提供的一個實現了IMessenger介面的類,可以用來在ViewModel之間、ViewModel和View之間傳遞消息。 Send 接受一個泛型參數,表示要發送的消息內容。 Register 方法用於註冊某個對象接收消息。 pub ...
是在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");