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?
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>
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!