【发布时间】:2012-02-04 15:17:06
【问题描述】:
解决方案的设置有点复杂,限制了我的选择。
- 有一个包含所有 GUI 组件的项目;其中包含一个控件,该控件包含一个“项目”项目列表,每个项目都包含一个“文档”项目列表。最初,这两个列表都是作为 ObservableCollections 实现的。
- 项目和文档在一个单独的项目中定义,该项目无权访问 System.Windows
- 程序的关键功能之一是在后台线程中生成一个文档(因为它既慢又耗时);需要将此文档添加到项目的文档集合中。
由于文档是在后台线程中生成的,因此该线程无法将文档添加到集合中 - 会生成 NotSupportedException。
有几种方法可以将 ObservableCollections 扩展为线程安全的 - 不幸的是,到目前为止我看到的所有方法都依赖于 System.Windows.Threading.Dispatcher,由于 (2),我无法使用它。
我发现I cannot use INotifyPropertyChanged on a list and must use a collection implementing INotifyCollectionChanged - 基本上又是 ObservableCollection。我不确定当有这么多不同的方法可以修改 List 对象时,实现一个 List 对象的扩展是否是一个好主意,以及说它不会有与 ObservableCollection 相同的问题?
鉴于 Document 位于 HierarchicalDataTemplate 中,并且在任何情况下将绑定传递给 Project 对象看起来有点难看,在绑定上使用显式 UpdateSourceTrigger 看起来并不可行。
有什么建议吗?
【问题讨论】: