使用Event Aggregator

时间:2015-07-16 01:48:14

标签: c# wpf mvvm backgroundworker eventaggregator

在我看来,我有一个绑定到ObservableCollection的Grid。我的ViewModel包含ObservableCollection

    public ObservableCollection<Session> Sessions
    {
        get
        {
            return _repository.GetSessions();
        }
        set
        {
            _sessions = value;
            NotifyPropertyChanged("Sessions");
        }
    }

当某个操作在另一个ViewModel中发生时,我向事件聚合器发布一个事件,我在ViewModel中订阅该事件,该事件包含Sessions属性并修改Sessions ObjectCollection中的对象。

当我从UI线程向事件聚合器发布事件时,订阅者的事件处理程序完成工作并且UI按预期更新。

问题是当我从后台工作者向事件聚合器发布事件时。订阅者中的代码已执行,但UI未更新。

这里有一些代码:

SecondaryViewModel.cs从UI线程发布事件。

_eventAggregator.GetEvent<SomethingChangedEvent>().Publish("this changed");

在MainViewModel.cs中,我订阅了该事件并更新了一个属性,并且UI DOES 更新。

//The subscription
_eventAggregator.GetEvent<SomethingChangedEvent>().Subscribe(SomethingChangedEventHandler, ThreadOption.UIThread);

后台工作人员

    //Check stuff in background
    private void CheckSessionsInBackground()
    {
        //Show your wait dialog
        var worker = new BackgroundWorker();
        worker.DoWork += DoWork;
        worker.RunWorkerCompleted += WorkerCompleted;
        worker.RunWorkerAsync();
    }

在DoWork方法中,我发布了一个事件

    private void DoWork(object sender, DoWorkEventArgs e)
    {
        //Some other work
        _eventAggregator.GetEvent<SomethingChangedEvent>().Publish("Changes from the background worker");

    }

如果我在处理程序中停止执行,我可以确认代码正在执行,但UI不会更新。我的问题是,当消息发布到后台工作程序中的eventaggregator时,是否可以更新集合。我查看了使用Dispatcher的示例,但没有一个使用EventAggregator。欢迎任何帮助。

0 个答案:

没有答案