如何解决wpf MVVM ObservableCollection
| 我的模型有几个属性,一个是字符串,另一个是observablecolletion。创建模型后,它会触发一个背景工作程序线程来基本上轮询.dll的数据。根据接收到的数据,它将设置字符串和/或将add和item设置为可观察的集合。我的string属性似乎可以触发其Onproperty更改,并且视图也将更新。但是,我的可观察Collection引发了跨线程异常。我尝试将我将ObesrvableCollection设置为worker.ReportProgress的代码移动,并得到相同的错误。我已将逻辑移到视图模型中,但仍然遇到相同的线程错误。我不确定为什么我的字符串属性适用于一个。我已经阅读了有关Dispatcher.Invoke的信息,但是我很确定我的模型不应该意识到这一点。任何人都可以解释解决此问题的正确方法。 只是-我的观点并不直接与我的模型联系在一起。我的模型中有一个属性,该模型通过构造函数注入传递。只是想把它放在那里,然后再有人认为我的模型正在直接与视图对话。解决方法
没有代码很难给出细节。但是,WPF自动为标量属性而不是集合封送属性更改通知。因此,您必须从非UI线程修改集合。
您的VM没有理由不能使用
Dispatcher
,或者您可以使用更通用的SynchronizationContext
。但是,它会使测试变得更加棘手。
如果您发布代码,则可能有一种简化的方法。
, 正如Kent所说,如果您不在用户界面上,则需要使用you0来更新您的收藏集:
Application.Current.Dispatcher.Invoke(new Action(() =>
{
// update your ObservableCollection here
}));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。