2

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

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

4

1 回答 1

6

如何使用 ObservableCollection 实现该行为?

问题是您不允许在 WPF 的后台线程上更新集合。绑定系统会自动将最简单的绑定编组到 UI 线程,而不是集合。你有两个选择。

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

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

于 2012-08-21T00:50:04.407 回答