使用Prism Event Aggregator在视图模型之间传递数据

时间:2019-02-26 12:33:27

标签: wpf prism viewmodel eventaggregator

我有一个用户控件,其DataContext绑定到其视图模型,该控件应显示绑定到其各自视图模型的任何其他UserControl状态消息

状态消息ObservableCollection<StatusGridModel>。现在,我尝试使用EventAggregation以便将此集合从我的不同视图模型传递到StatusViewModel

在每个视图模型的构造函数中,我都有IEventAggregator的Prism由Unity解析。现在在第一个ButtonClick的{​​{1}}上,我正在执行以下操作:

ViewModel

其中DashBoardStatusCol.Add(statusGridModel); eventAggregator.GetEvent<StatusEvent>().Publish(DashBoardStatusCol); 类是从StatusEvent派生的

PubSubEvent

下面是我的第二个视图模型,其中应显示状态消息。我已经在构造函数中订阅了public class StatusEvent : PubSubEvent<ObservableCollection<StatusGridModel>> { } 类。

StatusEvent

现在,我的问题是,在第一个视图模型中单击按钮时,从未调用订阅事件public class StatusGridViewModel : ViewModelBase<PresentationModel> { IEventAggregator eventAggregator; public StatusGridViewModel(IEventAggregator eventAggregator) { this.eventAggregator = eventAggregator; this.eventAggregator.GetEvent<StatusEvent>().Subscribe(SetStatus, true); } private void SetStatus(ObservableCollection<StatusGridModel> collection) { StatusCollection = collection; } private ObservableCollection<StatusGridModel> statusCollection; public ObservableCollection<StatusGridModel> StatusCollection { get { return statusCollection; } set { statusCollection = value; } } }

我想念什么?我的SetStatus是否应该实施ObservableCollection,并且应该在属性设置器上发布事件?

1 个答案:

答案 0 :(得分:1)

  

我的ObservableCollection是否应实施INotifyPropertyChanged,并在属性设置器上发布事件?

StatusCollection应该引发PropertyChanged事件,因此视图知道它应该更新其绑定。 ObservableCollection仅在更新内容AddRemove ...)时有效,而不是替换整个集合。