在显示ObservableCollection时修改它

Jin*_*Jin 2 wpf treeview observablecollection

我有一个树视图,其中ItemsSource是一个ObservableCollection.每次用户使用后台工作程序扩展子树并修改与子节点对应的基础ObservableCollection时,我都会动态加载子内容.但是,当我尝试在该线程内部修改此ObservableCollection时,它将失败,如果树已经展开(这意味着如果子项的数量很小,那么它将正确填充).

我希望实现的是,一旦我展开树,我可以看到孩子在处理时动态填充.如何使用ObservableCollection实现该行为?

Ree*_*sey 6

如何使用ObservableCollection实现该行为?

问题是您不允许在WPF中更新后台线程上的集合.绑定系统将自动封送大多数简单绑定到UI线程,但不会集合.你有两个选择.

  • 您可以编组调用以使用Dispatcher.Invoke或将数据添加回UI线程Dispatcher.BeginInvoke.这将允许添加数据,但在WPF更新绑定时不会导致跨线程异常.

  • (如果您使用的是.NET 4.5)您可以在绑定上使用新的EnableCollectionSynchronization,以允许对集合进行跨线程访问.