【发布时间】:2013-01-14 14:47:27
【问题描述】:
您无法绑定到 WPF DataGrid's Columns 属性,因此解决方法是使用 in this SO question/answer 中的附加属性。我的视图模型公开了一个包含DataGridColumns 的ObservableCollection,我通过这个附加属性将它绑定到DataGrid。
后台线程负责填充集合,我使用Dispatcher.Invoke 来执行此操作,我认为这可以避免线程问题。后台线程本身工作正常,但在上面附加的属性代码中引发了异常:
调用线程无法访问此对象,因为另一个线程拥有它。
(在处理添加操作的else if 中,特别是dataGrid.Columns.Add(column); 行)。
知道可能出了什么问题吗?
【问题讨论】:
-
你能在后台构建 ObservableCollection。但是然后在主(UI)线程上添加列?
-
@Blam 不确定我是否关注。 ObservableCollection 是 我的列集合。我正在使用 MVVM,这个附加属性是在运行时绑定列的唯一方法(我不知道设计时需要哪些列,因此无法在 XAML 中创建它们)。后台线程执行许多任务——检索数据、填充集合以绑定到网格行以及填充列集合。作为最后的手段,我可以将这最后一步移出后台线程并进入 UI 线程。创建十几个项目并不保证它在后台线程中。
-
如果创建十几个项目不能保证在后台线程上,那么为什么它是“最后的手段”。你不关注哪一部分?
标签: wpf datagrid observablecollection dispatcher background-thread