【发布时间】:2011-06-03 23:37:47
【问题描述】:
好的,从昨天开始,我增加了一层新的复杂性。我们还有一个理论模型类,ViewModel 和 View。这次我的模型有一个 Threading.Timer (专门选择在“错误”线程上获取计时器回调。
模型有一个 ObservableCollection。 Timer 回调将项目添加到集合中。
ViewModel 只是将集合传递给 View,其中包含绑定到集合的列表框。
这不起作用。
该模型还公开了一个字符串,该字符串在同一计时器回调中更新。
这也通过视图模型公开并绑定到文本框。
这确实有效。
我在谷歌搜索中看到了更新集合不会使 INotifyCollectionChanged 按预期工作的提示。我完全崩溃了,甚至没有例外,只是立即终止了应用程序。
所以有两个问题:
其中一个与我们昨天的讨论有关。我在我的模型中使用 INotifyPropertyChanged 和 ObservableCollections 因为它们是视图起作用的东西。使用这些机制来通知我的视图模型或底层模型发生了什么变化对我来说仍然有意义。那么如何处理发生在不同线程上的更新呢?
其次,发生了什么使 INotifyPropertyChanged 与绑定一起工作?我将一个字符串属性绑定到一个名为 Text 的 DependencyProperty,那么是 DependencyProperty 系统将我的更改编组回 UI 线程吗?编辑:我可以依赖它吗,即它这样做是因为他们希望我跨线程与它交谈,还是只是我不应该依赖的所有东西?
ListBox 是通过 ItemsSource="{Binding ObsCollection}" 绑定的。当这使应用程序崩溃时。实际上,起初我在创建模型时启动了计时器,这发生在设置窗口的 DataContext 时,所以它实际上会炸毁 Visual Studio...
谢谢
【问题讨论】:
标签: wpf multithreading mvvm observablecollection inotifypropertychanged