【问题标题】:Binding to List without ObservableCollection绑定到没有 ObservableCollection 的列表
【发布时间】:2012-02-04 15:17:06
【问题描述】:

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

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

由于文档是在后台线程中生成的,因此该线程无法将文档添加到集合中 - 会生成 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 看起来并不可行。

有什么建议吗?

【问题讨论】:

    标签: wpf binding


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 2011-02-15
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 2012-05-25
      相关资源
      最近更新 更多