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

问题描述 投票:-1回答:1

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

状态消息是ObservableCollection<StatusGridModel>。现在我正在尝试使用EventAggregation将这个集合从我的不同视图模型传递给StatusViewModel

在每个视图模型的构造函数中,我都有Unity解析的棱镜IEventAggregator。现在在第一个ButtonClickViewModel我正在做以下事情:

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并且我应该发布我的活动吗?

wpf prism viewmodel eventaggregator
1个回答
1
投票

我的ObservableCollection应该实施INotifyPropertyChanged并且我应该发布我的活动吗?

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

© www.soinside.com 2019 - 2024. All rights reserved.