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