Maison > développement back-end > C++ > Comment modifier une ObservableCollection à partir d'un thread non-dispatcher dans WPF ?

Comment modifier une ObservableCollection à partir d'un thread non-dispatcher dans WPF ?

Linda Hamilton
Libérer: 2024-10-31 20:06:01
original
940 Les gens l'ont consulté

How to Modify an ObservableCollection From a Non-Dispatcher Thread in WPF?

"Ce type de CollectionView ne prend pas en charge les modifications apportées à sa collection source à partir d'un thread différent du thread Dispatcher"

Description du problème

Une liaison DataGrid à une ObservableCollection remplie de manière asynchrone génère une erreur indiquant que les modifications apportées à SourceCollection ne sont pas autorisées à partir d'un thread non-Dispatcher.

Solution

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 fil de discussion différent, le délégué doit être placé sur le répartiteur d'interface utilisateur.

Code ViewModel mis à jour

<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>
Copier après la connexion

En appelant le délégué sur le répartiteur d'interface utilisateur, les ajouts à ObservableCollection sont planifiés sur le thread de l'interface utilisateur, résolvant l'exception.

Liaison et actualisation améliorées

Pour la liaison asynchrone et l'actualisation du DataGrid, envisagez d'utiliser INotifyPropertyChanged sur vos propriétés ViewModel et d'appeler le Dispatcher pour actualiser le Éléments de l'interface utilisateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal