【发布时间】:2012-03-25 14:55:32
【问题描述】:
我正在使用 Prism 的 EventAggregator 在我的模块的 ViewModel 之间进行松散耦合的通信。我在 ViewModelA 中有几个属性(例如 FirstName、LastName),当它们的值发生变化时需要更新 ViewModelB 中的属性。我目前的解决方案包括:
ViewModelA 使用 FirstName 的新值作为有效负载发布事件:
public string FirstName
{
get {return firstName;}
set
{
this.firstName = value;
eventAggregator.GetEvent<PatientDetailsEvent>().Publish(firstName);
}
}
ViewModelB 订阅了该事件并相应地更改其 FirstName 属性:
public PatientBannerViewModel(IEventAggregator eventAggregator)
{
this.eventAggregator = eventAggregator;
eventAggregator.GetEvent<PatientDetailsEvent>().Subscribe(UpdateBanner, ThreadOption.UIThread);
}
public void UpdateBanner(string firstName)
{
this.FirstName = firstName;
}
这适用于单个属性。它不适用于多个不同的属性,因为 ViewModelB 不知道 ViewModelA 上的哪些属性发生了变化。 ViewModelB 知道新值是什么,但它不知道要更新它的哪些属性。
我可以为每个属性创建单独的事件,但这似乎是重复的。只使用一个事件似乎更干净。理想情况下,在发布事件时,ViewModelA 应该告诉 ViewModelB 哪个属性发生了变化。我怎样才能做到这一点?
【问题讨论】:
-
好的,我在this post 中找到了我的问题的答案。我会在 8 小时后发布我的问题的具体答案。
标签: wpf mvvm prism eventaggregator