在显示ObservableCollection时修改它

时间:2012-08-21 00:46:31

标签: wpf treeview observablecollection

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

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

1 个答案:

答案 0 :(得分:6)

  

如何使用ObservableCollection实现该行为?

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

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

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