不能绑定到 WPF DataGrid's
列属性,因此解决方法是使用此 SO 问题/答案中找到的附加属性。我的视图模型公开了一个包含DataGridColumns
的ObservableCollection
,我通过这个附加属性将其绑定到DataGrid
。
后台线程负责填充集合,我正在使用Dispatcher.Invoke
来执行此操作,我认为这样可以避免线程问题。后台线程本身工作正常,但在上面附加的属性代码中引发了异常:
调用线程无法访问此对象,因为其他线程拥有它。
(在处理添加操作的else if
中,特别是第 dataGrid.Columns.Add(column);
行)。
知道可能出了什么问题吗?
如果您使用的是 .NET 4.5,最简单的选择是使用 BindingOperations.EnableCollectionSynchronization。 这允许您直接更新后台线程上的集合,而无需担心绑定中的同步。
否则,您需要确保对集合的所有更改都在用户界面线程上进行。 使用 Dispatcher.Invoke
应该可以工作(前提是您获得正确的 Dispatcher
实例),尽管有更优雅的解决方案,例如 The Helper Trinity 和其他项目中的绑定集合。