Maison > développement back-end > C++ > Pourquoi l'observation ne détecte-t-elle pas des changements dans les propriétés de l'enfant?

Pourquoi l'observation ne détecte-t-elle pas des changements dans les propriétés de l'enfant?

Patricia Arquette
Libérer: 2025-01-29 13:16:10
original
498 Les gens l'ont consulté

Why Doesn't ObservableCollection Detect Changes in Child Properties?

Traiter les limitations de l'ObservableCollection avec les modifications de la propriété des enfants

La norme ObservableCollection en C # ne suit que les ajouts et les éliminations des éléments. Il ne surveille pas intrinsèquement les modifications des propriétés de ces éléments, même si ces éléments implémentent INotifyPropertyChanged. Cela conduit à des liaisons d'interface utilisateur à ne pas mettre à jour lorsqu'une propriété enfant est modifiée.

ObservableCollection améliorée: La solution

Pour résoudre ce problème, nous pouvons créer une classe de collecte personnalisée, appelons-le TrulyObservableCollection, qui étend la fonctionnalité de ObservableCollection:

<code class="language-csharp">public sealed class TrulyObservableCollection<T> : ObservableCollection<T>
    where T : INotifyPropertyChanged
{
    public TrulyObservableCollection() : base() { }

    protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
    {
        if (e.Action == NotifyCollectionChangedAction.Add)
        {
            foreach (T item in e.NewItems)
            {
                item.PropertyChanged += ItemPropertyChanged;
            }
        }
        else if (e.Action == NotifyCollectionChangedAction.Remove)
        {
            foreach (T item in e.OldItems)
            {
                item.PropertyChanged -= ItemPropertyChanged;
            }
        }
        base.OnCollectionChanged(e);
    }

    private void ItemPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, sender, sender, IndexOf((T)sender)));
    }
}</code>
Copier après la connexion

Cette classe améliorée garantit que lorsque des éléments sont ajoutés, il s'abonne à leurs événements PropertyChanged. Lorsqu'une propriété change, la méthode ItemPropertyChanged déclenche une action Replace dans la collection, notifiant efficacement les éléments d'interface utilisateur liés du changement. La suppression des éléments se désabonnera correctement de l'événement PropertyChanged pour empêcher les fuites de mémoire.

en utilisant TrulyObservableCollection garantit que les modifications des éléments eux-mêmes et de leurs propriétés se reflètent dans vos liaisons de données, ce qui entraîne une interface utilisateur plus réactive et précise.

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