2012-01-06 7 views
1

ソリューションのセットアップは少し複雑で、私のオプションは制限されています。ObservableCollectionなしのリストへのバインド

  1. すべてのGUIコンポーネントが含まれているプロジェクトがあります。その中には、それぞれ「ドキュメント」アイテムのリストを含む「プロジェクト」アイテムのリストを含むコントロールがあります。最初は、これらのリストの両方がObservableCollectionsとして実装されていました。
  2. プロジェクトとドキュメントはSystem.Windowsにアクセスできない別のプロジェクトで定義されています
  3. プログラムの重要な機能の1つは、バックグラウンドスレッド内でドキュメントを生成します(遅くて時間がかかるためです)。 );このドキュメントをプロジェクトのドキュメントコレクションに追加する必要があります。

ドキュメントがバックグラウンドスレッドで生成されているため、そのスレッドはドキュメントをコレクションに追加できないため、NotSupportedExceptionが生成されます。

ObservableCollectionsをスレッドセーフに拡張するにはいくつかの方法があります。残念ながら、これまで見たことのあるものはすべて(2)のために使用できないSystem.Windows.Threading.Dispatcherに依存しています。

私は、I cannot use INotifyPropertyChanged on a list and must use a collection implementing INotifyCollectionChanged - 基本的にObservableCollectionを発見しました。 ObservableCollectionと同じ問題を持たないと言っても良いことは、リストオブジェクトの拡張を実装することは良い考えですか?

バインディングで明示的なUpdateSourceTriggerを使用すると、ドキュメントがHierarchicalDataTemplate内にあり、いずれの場合でもProjectオブジェクトへのバインディングを渡すのが少し醜いように見えます。

提案がありますか?

答えて

2

バックグラウンドスレッドでドキュメントを作成しますが、プライマリスレッドでコールバックを使用してObservableCollectionに追加します(ObservableCollectionがプライマリスレッドで作成されていると仮定します)。

関連する問題