У меня есть пользовательский элемент управления, чья DataContext
привязана к его модели вида, которая должна отображать Сообщения о состоянии от любых других UserControl
s, которые привязаны к их соответствующим моделям вида.
Сообщения о состоянии - это ObservableCollection<StatusGridModel>
.Теперь я пытаюсь использовать EventAggregation
, чтобы передать эту коллекцию из моих различных моделей представлений в StatusViewModel
.
В конструкторе каждой модели представления у меня есть IEventAggregator
Prism, разрешенного Unity.Теперь на 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
и на установщике свойства я должен опубликовать свое событие?