2

您不能绑定到 WPF DataGrid'sColumns 属性,因此解决方法是使用在此 SO question/answer中找到的附加属性。我的视图模型公开了一个ObservableCollection包含 的DataGridColumns,我DataGrid通过这个附加属性将它绑定到 。

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

调用线程无法访问此对象,因为不同的线程拥有它。

(在else if处理 Add 动作的地方,特别是 line dataGrid.Columns.Add(column);)。

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

4

1 回答 1

1

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

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

于 2013-01-30T17:21:28.720 回答