4 votes

C# ObservableCollection OnCollectionChanged ne se déclenche pas lorsque l'élément change.

Extrait du MSDN à propos de OnCollectionChanged : "Se produit lorsqu'un élément est ajouté, supprimé, modifié, déplacé ou que la liste entière est rafraîchie."

Je modifie une propriété attachée à un objet qui réside dans ma collection, mais OnCollectionChanged n'est pas déclenché. J'implémente iNotifyPropertyChanged sur la classe de l'objet.

public class ObservableBatchCollection : ObservableCollection<BatchData>
    {
        protected override void OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            if(e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
            {
                foreach (BatchData item in e.NewItems)
                {

                }
            }
            base.OnCollectionChanged(e);
        }

        public ObservableBatchCollection(IEnumerable<BatchData> items)
            : base(items)
        {

        }
}

Pour moi, cela signifie que lorsqu'un élément de la collection est modifié, par exemple une propriété de l'objet, cet événement doit se déclencher. Or, ce n'est pas le cas. Je veux être en mesure de savoir quand un élément de ma collection personnalisée change afin de pouvoir effectuer un calcul sur cet élément, si nécessaire.

Des idées ?

7voto

dlev Points 28160

ObservableCollection<T> ne déclenche des événements que lorsque le la collection elle-même change . Un élément contenu dans la collection dont l'état interne a muté n'a pas modifié la structure de la collection, et ObservableCollection<T> ne le signaleront pas.

Une option consiste à sous-classer ObservableCollection<T> et s'abonner à la liste de diffusion de chaque élément OnPropertyChanged lorsqu'il est ajouté. Dans ce gestionnaire, vous pouvez déclencher un événement personnalisé ou faire appel à l'événement propre à la collection. PropertyChanged événement. Notez que si vous suivez cette voie, vous devez ajouter une contrainte générique de sorte que T : INotifyPropertyChanged .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X