指定されたエラー メッセージ、「このタイプCollectionView の は、Dispatcher スレッドとは異なるスレッドからの SourceCollection への変更をサポートしていません」は、非 UI スレッドから ObservableCollection を変更しようとする試みを示します。
提供されたコードで説明されているように、ViewModel の Load( ) メソッドは、GetMatchDetailsDC オブジェクトのリストから _matchObsCollection ObservableCollection を設定します。ただし、この更新は UI スレッドの外部で実行されます。
WPF では、DataGrid などの UI 要素は UI スレッド上に作成され、スレッドの親和性。これらの要素に対する変更は、スレッドの安全性を確保するために UI スレッドから実行する必要があります。
この問題を解決するには、App.Current.Dispatcher.Invoke(( Action)delegate { ... }) UI スレッドでコレクションの更新を呼び出すメソッド:
<code class="csharp">matchList = proxy.GetMatch().ToList(); foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList) { App.Current.Dispatcher.Invoke((Action)delegate // <-- Here { _matchObsCollection.Add(match); }); }</code>
データの読み込みには非同期メソッドを使用するのが一般的ですが、非 UI スレッドから UI 要素を操作するときは、スレッドの安全性を考慮することが重要です。スレッド関連のエラーを回避するために、ObservableCollection の変更など、UI 要素の更新は必ず UI スレッドで実行されるようにしてください。
以上が「この種類の CollectionView は、ディスパッチャー スレッドとは異なるスレッドからの SourceCollection への変更をサポートしていません」というメッセージが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。