mvvmlight的消息传递机制
时间: 2023-08-08 13:09:09 浏览: 126
MVVMLight 提供了一个名为 `Messenger` 的类,用于实现消息传递机制。通过 `Messenger` 类,可以在不同的 ViewModel 之间发送和接收消息,实现模块解耦和相互通信。
以下是使用 MVVMLight 的消息传递机制的基本步骤:
1. 创建发送消息的 ViewModel:
```csharp
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using GalaSoft.MvvmLight.Messaging;
namespace MVVMLightDemo.ViewModels
{
public class SenderViewModel : ViewModelBase
{
public RelayCommand SendMessageCommand { get; private set; }
public SenderViewModel()
{
SendMessageCommand = new RelayCommand(SendMessage);
}
private void SendMessage()
{
Messenger.Default.Send<string>("Hello from SenderViewModel!");
}
}
}
```
在上述代码中,我们创建了一个名为 `SenderViewModel` 的 ViewModel,并在其中定义了一个 `SendMessageCommand`,当该命令执行时,会发送一个字符串类型的消息。
2. 创建接收消息的 ViewModel:
```csharp
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Messaging;
namespace MVVMLightDemo.ViewModels
{
public class ReceiverViewModel : ViewModelBase
{
public string Message { get; private set; }
public ReceiverViewModel()
{
Messenger.Default.Register<string>(this, HandleMessage);
}
private void HandleMessage(string message)
{
Message = message;
RaisePropertyChanged(nameof(Message));
}
}
}
```
在上述代码中,我们创建了一个名为 `ReceiverViewModel` 的 ViewModel,并在构造函数中使用 `Messenger.Default.Register` 方法注册对字符串类型消息的处理方法。当接收到消息时,`HandleMessage` 方法会被调用,并将消息存储在 `Message` 属性中。
3. 在视图中绑定接收到的消息:
```xaml
<Window x:Class="MVVMLightDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MVVMLightDemo"
xmlns:ViewModels="clr-namespace:MVVMLightDemo.ViewModels"
Title="MVVMLight Demo" Height="350" Width="525">
<Window.DataContext>
<ViewModels:ReceiverViewModel />
</Window.DataContext>
<StackPanel>
<TextBlock Text="{Binding Message}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24" />
</StackPanel>
</Window>
```
在上述代码中,我们将视图的 DataContext 绑定到 `ReceiverViewModel`,并将 `Message` 属性绑定到 TextBlock 的 Text 属性。这样,当接收到消息时,TextBlock 中将显示消息的内容。
通过上述步骤,我们实现了在两个 ViewModel 之间的消息传递。当发送消息的 ViewModel 执行 `SendMessageCommand` 时,消息将发送到 `ReceiverViewModel`,并由 `HandleMessage` 方法处理。处理后的消息将存储在 `Message` 属性中,并通过数据绑定在视图中显示出来。
请注意,在使用 MVVMLight 的消息传递机制时,需要确保注册和注销相应的消息处理方法,以避免内存泄漏。可以在接收消息的 ViewModel 的构造函数中注册消息处理方法,并在 ViewModel 销毁时调用 `Messenger.Default.Unregister` 方法注销消息处理方法。
阅读全文