使用不正确的 Messenger 广播 RaisePropertyChanged

RaisePropertyChanged broadcast using incorrect Messenger

ViewModelLocator 中:

SimpleIoc.Default.Register<IMessenger, Messenger>();

在 属性 中 视图模型:

RaisePropertyChanged<string>("CurrentDrug", oldValue, value, true);

查看模型 #2:

this.messengerService.Register<PropertyChangedMessage<string>>(
    this, 
    this.HandleDrugChangedMessage);

查看模型 #2 从未收到广播消息。但是,如果我将视图模型 #2 更改为:

Messenger.Default.Register<PropertyChangedMessage<string>>(
    this, 
    this.HandleDrugChangedMessage);

那就一切都好。

我该怎么做才能使传入视图模型的 messengerService 成为最初广播消息的服务,而不是 Messenger.Default 服务?

显示如何通过 Messenger 服务:

public class ViewModelNumberOne: ViewModelBase
{
    // dependency
    private IMessenger messengerService;

    // constructor
    public ViewModelNumberOne(IMessenger messengerService)
    {
        this.messengerService = messengerService;
    }
}

public class ViewModelNumberTwo: ViewModelBase
{
    // dependency
    private IMessenger messengerService;

    // constructor
    public ViewModelNumberTwo(IMessenger messengerService)
    {
        this.messengerService = messengerService;
    }
}

目前,当您注册 IMessenger 接口时,您实际上是在注册具体类型本身,而不是该具体类型的特定实例。

SimpleIoc.Default.Register<IMessenger>(() => Messenger.Default);

使用上述语法,当 SimpleIoC 解析 IMessenger 时,它将使用 Messenger.Default 实例进行解析,并将其保留为单例。这将允许您使用注入的实例。