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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Prism Event Aggregator在View模型之间传递数据相关的知识,希望对你有一定的参考价值。

我有一个用户控件,其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并且我应该发布我的活动吗?

答案

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

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

以上是关于使用Prism Event Aggregator在View模型之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章

Storm Trident示例Aggregator

如何在Apache Camel Aggregator关联中加入多个标头

JavaScript Feed Aggregator

Spring Integration Aggregator + JDBC Message Store 性能

启动open-falcon失败([falcon-aggregator] failed to start)

如何从Combiner/Reducer/Aggregator 函数返回具有多个字段的元组?