2011-06-12 129 views
0

我的模型有几个属性,一个是字符串,另一个是observablecolletion。当模型创建时,它会触发一个backgroundworker线程来基本轮询一个.dll文件以获取数据。根据它收到的数据,它将设置字符串和/或添加和项目可观察收藏。我的字符串属性似乎火它的On属性更改就好,视图更新。但是,我的可观察集合引发了一个交叉线程异常。我尝试过移动代码,我将ObesrvableCollection设置为worker.ReportProgress,并得到相同的错误。我已经将逻辑转移到视图模型中,仍然会出现相同的线程错误。我不确定为什么我的字符串属性适用于一个。我已阅读Dispatcher.Invoke,但我很确定我的模型不应该知道这一点。任何人都可以解释正确的方式去请这个。wpf MVVM ObservableCollection

只是fyi - 我的观点并不直接与我的模型挂钩。我在我的viewModel中有一个属性,模型通过构造函数注入。只是想在有人认为我的模型正在直接与观点对话之前将其说出。

回答

1

很难给出没有代码的细节。但是,WPF自动编组属性更改通知的标量属性而不是集合。因此,您必须从非UI线程修改集合。

没有理由为什么你的虚拟机不能使用Dispatcher,或者更普通的SynchronizationContext如果你愿意的话。但是,它可以使测试变得更加棘手。

如果您发布代码,可能有一种方法可以简化您的工作。

1

肯特说,如果你不是在UI上你需要使用Dispatcher来更新您的收藏:

Application.Current.Dispatcher.Invoke(new Action(() => 
{ 
    // update your ObservableCollection here 
})); 
相关问题