使用不正确的 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
实例进行解析,并将其保留为单例。这将允许您使用注入的实例。
在 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
实例进行解析,并将其保留为单例。这将允许您使用注入的实例。