绑定到没有ObservableCollection的List

时间:2012-01-06 22:51:10

标签: wpf binding

解决方案的设置有点复杂,限制了我的选择。

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

    有几种方法可以将ObservableCollections扩展为线程安全 - 遗憾的是,到目前为止我所看到的所有方法都依赖于System.Windows.Threading.Dispatcher,由于(2)我无法使用它。

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

    在绑定上使用显式UpdateSourceTrigger看起来不可行,因为Document在HierarchicalDataTemplate中,并且无论如何将绑定传递给Project对象看起来有点难看。

    有什么建议吗?

1 个答案:

答案 0 :(得分:2)

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