我有一个用户控件,其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
,并且应该在属性设置器上发布事件?
答案 0 :(得分:1)
我的
ObservableCollection
是否应实施INotifyPropertyChanged
,并在属性设置器上发布事件?
StatusCollection
应该引发PropertyChanged
事件,因此视图知道它应该更新其绑定。 ObservableCollection
仅在更新内容(Add
,Remove
...)时有效,而不是替换整个集合。