Une liaison DataGrid à un ObservableCollection rempli de manière asynchrone génère une erreur indiquant que les modifications apportées à SourceCollection ne sont pas autorisées à partir d'un non-Dispatcher thread.
Le problème vient de l'affinité du thread. L'ObservableCollection est initialement créée sur le thread d'interface utilisateur, ce qui la rend accessible uniquement à partir du thread d'interface utilisateur. Pour le modifier à partir d'un autre thread, le délégué doit être placé sur le répartiteur de l'interface utilisateur.
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);
});
}
}
En appelant le délégué sur le répartiteur de l'interface utilisateur, les ajouts à ObservableCollection sont planifiés sur le thread de l'interface utilisateur, résolvant ainsi l'exception.
Pour les tâches asynchrones liaison et actualisation du DataGrid, envisagez d'utiliser INotifyPropertyChanged sur vos propriétés ViewModel et d'appeler le Dispatcher pour actualiser l'interface utilisateur éléments.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3