A DataGrid 綁定非同步填充的ObservableCollection 會拋出錯誤,指出不允許從非Dispatcher 執行緒對SourceCollection 進行更改。
問題是由線程關聯引起的。 ObservableCollection 最初是在 UI 執行緒上建立的,因此只能從 UI 執行緒存取它。要從不同的線程修改它,必須將委託放置在 UI Dispatcher 上。
public void Load()
{
matchList = new List();
matchList = proxy.GetMatch().ToList();
foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
{
App.Current.Dispatcher.Invoke((Action)delegate
{
_matchObsCollection.Add(match);
});
}
}
透過呼叫 UI Dispatcher 上的委託,在 UI 執行緒上安排對 ObservableCollection 的添加,從而解決異常。
用於非同步綁定和刷新 DataGrid,請考慮在 ViewModel 屬性上使用 INotifyPropertyChanged 並呼叫 Dispatcher 來刷新 UI 元素。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3