1

これが私の状況です:

非 UserInterface クラスの BindingList "Results" を ListCollectionView.Source プロパティとして使用する ListCollectionView からプルするユーザー インターフェイス ItemsControl "ResultsPresenter" (WPF) を取得しました。

追加操作などの「結果」に変更を加えるたびに、NotSupportedException が発生し、{「このタイプの CollectionView は、Dispatcher スレッドとは異なるスレッドからの SourceCollection への変更をサポートしていません。」}

このエラーは「結果」コレクションから発生しているように見えますが、エラー情報は明らかに WPF によって生成されたようです。このエラーがスローされる理由と、「結果」を含むクラスを WPF 関連コードに公開せずに解決する方法を知りたいです。

ノート:

この解決策は、バインディングの「Results」プロパティを直接見ているときにこのエラーが発生した後に発生しました。ListCollectionView は、この状況を解決するためにのみ導入されたものであり、おそらく問題の一部ではありません。

4

2 に答える 2

1

これは、WPF が Avalon と呼ばれて以来、コレクション変更通知に関する既知の問題です。この件に関するBea Stollnitz のブログ投稿を参照してください。

ディスパッチャ スレッドでコレクションの変更を行うことで、非常に簡単に回避できます。アイテムや変更を返す長時間の操作があると思うので、 Rxを調べて、IObservable の ObserveOnDispatcher 設定を使用することをお勧めします。一般に、 Rxは、この種のことを以前よりもはるかに簡単にします。

于 2010-07-23T16:49:22.347 に答える
1

Results コレクションによって発生したイベントはListCollectionView、UI に通知するために によって処理されます。これが非 UI スレッドで発生すると、この例外が発生します。

したがって、明示的にサポートされていない限り、非 UI スレッドから UI バインド コレクションを変更しないでください。しばらく前に、それをサポートするクラスを作成しました。ここで見つけることができます。

于 2010-07-23T16:11:53.150 に答える