绑定到没有ObservableCollection的列表
问题描述:
解决方案的设置有点复杂,限制了我的选择。绑定到没有ObservableCollection的列表
- 有一个项目包含所有的GUI组件;其中包含一个包含'项目'项目列表的控件,每个项目都包含'文档'项目列表。最初这两个列表都是作为ObservableCollections实现的。
- 项目和文档在一个单独的项目中定义,其中一个无法访问System.Windows
- 该程序的一个关键功能是在后台线程中生成一个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对象看起来有点难看。
有什么建议吗?
答
在后台线程上创建文档,但在主线程上使用回调将其添加到ObservableCollection(假设ObservableCollection是在主线程上创建的)。