DataGrid バインド非同期的に設定された ObservableCollection に対して、非 Dispatcher スレッドからの SourceCollection への変更が許可されていないことを示すエラーがスローされます。
問題は、スレッドのアフィニティから発生します。 ObservableCollection は最初に UI スレッド上に作成されるため、UI スレッドからのみアクセス可能になります。別のスレッドから変更するには、デリゲートを UI ディスパッチャーに配置する必要があります。
<code class="csharp">public void Load() { matchList = new List<GetMatchDetailsDC>(); matchList = proxy.GetMatch().ToList(); foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList) { App.Current.Dispatcher.Invoke((Action)delegate { _matchObsCollection.Add(match); }); } }</code>
UI ディスパッチャーでデリゲートを呼び出すことにより、ObservableCollection に追加されます。は UI スレッドでスケジュールされ、例外を解決します。
DataGrid の非同期バインディングと更新については、ViewModel プロパティで INotifyPropertyChanged を使用し、Dispatcher を呼び出して、 UI 要素。
以上がWPF の非ディスパッチャー スレッドから ObservableCollection を変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。