本人是从Winform转向WPF的小白,在Winform中直接使用构造函数或者全局变量就可以最参数进行传参,但是WPF是另一个思维,目前了解到的是通过Message来进行传递。

  1. 新建一个类,来存放需要传递的状态,比如设备是否已连接。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // ConnectionStatusMessage.cs
    using GalaSoft.MvvmLight.Messaging;

    namespace ViewModels.SideBar
    {
    public class ConnectionStatusMessage
    {
    public bool IsConnected { get; set; }
    }
    }
  2. 修改 DeviceViewModel,发送消息

    在连接成功和断开的地方添加消息发送:

    1
    2
    3
    4
    // 发送断开消息
    Messenger.Default.Send(new ConnectionStatusMessage { IsConnected = false });
    // 发送连接成功消息
    Messenger.Default.Send(new ConnectionStatusMessage { IsConnected = true });
  3. 修改 StatusBarViewModel,接收消息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public StatusBarViewModel()
    {
    // 注册消息接收
    Messenger.Default.Register<ConnectionStatusMessage>(this, OnConnectionStatusChanged);
    }

    private void OnConnectionStatusChanged(ConnectionStatusMessage message)
    {
    IsConnected = message.IsConnected;
    }

原理说明:

1
2
3
4
5
6
7
8
9
10
11
DeviceViewModel                  StatusBarViewModel
| |
|--- 连接成功/断开 -----------------> |
| Messenger.Send(msg) |
| |
| Messenger.Register
| OnConnectionStatusChanged
| |
| IsConnected = msg.IsConnected
| |
| UI 自动更新颜色