WPF 中的线程问题



不能绑定到 WPF DataGrid's 列属性,因此解决方法是使用此 SO 问题/答案中找到的附加属性。我的视图模型公开了一个包含DataGridColumnsObservableCollection,我通过这个附加属性将其绑定到DataGrid

后台线程负责填充集合,我正在使用Dispatcher.Invoke来执行此操作,我认为这样可以避免线程问题。后台线程本身工作正常,但在上面附加的属性代码中引发了异常:

调用线程无法访问此对象,因为其他线程拥有它。

(在处理添加操作的else if中,特别是第 dataGrid.Columns.Add(column); 行)。

知道可能出了什么问题吗?

如果您使用的是 .NET 4.5,最简单的选择是使用 BindingOperations.EnableCollectionSynchronization。 这允许您直接更新后台线程上的集合,而无需担心绑定中的同步。

否则,您需要确保对集合的所有更改都在用户界面线程上进行。 使用 Dispatcher.Invoke 应该可以工作(前提是您获得正确的 Dispatcher 实例),尽管有更优雅的解决方案,例如 The Helper Trinity 和其他项目中的绑定集合。

相关内容

  • 没有找到相关文章

最新更新