我有一个用户控件,其DataContext
绑定到其视图模型,该模型应显示来自任何其他UserControl
s的状态消息,这些消息绑定到各自的视图模型。
状态消息是ObservableCollection<StatusGridModel>
。现在我正在尝试使用EventAggregation
将这个集合从我的不同视图模型传递给StatusViewModel
。
在每个视图模型的构造函数中,我都有Unity解析的棱镜IEventAggregator
。现在在第一个ButtonClick
的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
应该实施INotifyPropertyChanged
并且我应该发布我的活动吗?
我的
ObservableCollection
应该实施INotifyPropertyChanged
并且我应该发布我的活动吗?
StatusCollection
应该提升PropertyChanged
事件,因此视图知道它应该更新其绑定。 ObservableCollection
仅在内容更新时才有效(Add
,Remove
...),而不是更换整个集合。