DataGrid 綁定異步填充的ObservableCollection 會拋出錯誤,指出非Dispatcher 執行緒不允許對SourceCollection 進行更改。
問題是由執行緒關聯引起的。 ObservableCollection 最初是在 UI 執行緒上建立的,因此只能從 UI 執行緒存取它。要從不同的線程修改它,必須將委託放置在 UI Dispatcher 上。
<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 Dispatcher 上的委託,加入到 ObservableCollection安排在 UI 執行緒上,解決異常。
對於 DataGrid 的非同步綁定和刷新,請考慮在 ViewModel 屬性上使用 INotifyPropertyChanged 並呼叫 Dispatcher 來刷新UI 元素。
以上是如何從 WPF 中的非調度程序執行緒修改 ObservableCollection?的詳細內容。更多資訊請關注PHP中文網其他相關文章!