我有一个树视图,其中ItemsSource是一个ObservableCollection。每次用户使用后台工作程序扩展子树并修改与子节点对应的基础ObservableCollection时,我都会动态加载子内容。但是,当我尝试在该线程内部修改此ObservableCollection时,它将失败,如果树已经展开(这意味着如果子项的数量很小,那么它将正确填充)。
我希望实现的是,一旦我展开树,我就可以看到孩子在处理时动态填充。如何使用ObservableCollection实现该行为?
答案 0 :(得分:6)
如何使用ObservableCollection实现该行为?
问题是您不允许在WPF中更新后台线程上的集合。绑定系统将自动封送大多数简单绑定到UI线程,但不会集合。你有两个选择。
您可以使用Dispatcher.Invoke
或Dispatcher.BeginInvoke
封送调用以将数据添加回UI线程。这将允许添加数据,但在WPF更新绑定时不会导致跨线程异常。
(如果您使用的是.NET 4.5)您可以在绑定上使用新的EnableCollectionSynchronization以允许对集合进行跨线程访问。