Передача данных между моделями View с помощью Prism Event Aggregator - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть пользовательский элемент управления, чья 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 и на установщике свойства я должен опубликовать свое событие?

1 Ответ

0 голосов
/ 26 февраля 2019

Должен ли мой ObservableCollection реализовать INotifyPropertyChanged и на установщике свойства я должен опубликовать свое событие?

StatusCollection должно вызвать событие PropertyChanged, поэтому представлениезнает, что он должен обновить свои привязки.ObservableCollection работает только при обновлении содержимого (Add, Remove ...), но не при замене всей коллекции.

...