2012-01-06 82 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是在主線程上創建的)。

相關問題