2012-01-06 56 views
1

解决方案的设置有点复杂,限制了我的选择。绑定到没有ObservableCollection的列表

  1. 有一个项目包含所有的GUI组件;其中包含一个包含'项目'项目列表的控件,每个项目都包含'文档'项目列表。最初这两个列表都是作为ObservableCollections实现的。
  2. 项目和文档在一个单独的项目中定义,其中一个无法访问System.Windows
  3. 该程序的一个关键功能是在后台线程中生成一个Document(因为它很慢并且耗时);此文档需要添加到项目的文档集合中。

由于正在后台线程中生成文档,该线程无法将文档添加到集合 - 生成NotSupportedException。

有几种方法可以将ObservableCollections扩展为线程安全 - 不幸的是,迄今为止我所见过的所有依赖于System.Windows.Threading.Dispatcher,由于(2)我不能使用它。

我发现I cannot use INotifyPropertyChanged on a list and must use a collection implementing INotifyCollectionChanged - 基本上是ObservableCollection了。我不确定当有很多不同的方法可以修改它时,实现List对象的扩展是否是个好主意,并且说它不会有与ObservableCollection相同的问题?

假设Document在HierarchicalDataTemplate中,在绑定上使用显式UpdateSourceTrigger看起来不太可行,并且在任何情况下将绑定传递给Project对象看起来有点难看。

有什么建议吗?

回答

2

在后台线程上创建文档,但在主线程上使用回调将其添加到ObservableCollection(假设ObservableCollection是在主线程上创建的)。

相关问题