Ein DataGrid gebunden zu einer asynchron gefüllten ObservableCollection löst einen Fehler aus, der besagt, dass Änderungen an der SourceCollection von einem Nicht-Dispatcher nicht zulässig sind Thread.
Das Problem ergibt sich aus der Thread-Affinität. Die ObservableCollection wird zunächst im UI-Thread erstellt, sodass nur über den UI-Thread darauf zugegriffen werden kann. Um es von einem anderen Thread aus zu ändern, muss der Delegat auf dem UI-Dispatcher platziert werden.
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);
});
}
}
Durch Aufrufen des Delegaten auf dem UI-Dispatcher werden die Ergänzungen zur ObservableCollection im UI-Thread geplant, wodurch die Ausnahme aufgelöst wird.
Für asynchron Um das DataGrid zu binden und zu aktualisieren, sollten Sie INotifyPropertyChanged für Ihre ViewModel-Eigenschaften verwenden und den Dispatcher aufrufen, um das DataGrid zu aktualisieren UI-Elemente.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3