Comment ObservableCollection<T>.Ajouter le travail?
-
14-11-2019 - |
Question
J'ai essayé de mettre en œuvre une collection spécialisée qui fonctionne comme ObservableCollection
pour encapsuler des mécanismes de plus en, pour que je le laisse ma collection hériter de Collection
et j'ai aussi de mettre en œuvre les mêmes interfaces.
Je n'arrive pas à obtenir mais la façon dont on met en œuvre l'ensemble de la collection-changé-logique, par exemple Collection<T>.Add
n'est pas remplacé (il n'est même pas marqué comme virtuel), donc comment le ObservableCollection
le feu CollectionChanged
événement si des éléments ont été ajoutés à l'aide de cette méthode?
La solution
Pour répondre à votre question spécifique, Collection<T>.Add
les appels de la InsertItem
méthode virtuelle (après avoir vérifié que la collection n'est pas en lecture seule). ObservableCollection<T>
en effet, les remplacements de cette méthode pour l'insérer et augmenter la modification des notifications.
Autres conseils
Elle le fait en appelant InsertItem
qui est remplacé et peut être vu lors de la décompilation
protected override void InsertItem(int index, T item)
{
this.CheckReentrancy();
base.InsertItem(index, item);
this.OnPropertyChanged("Count");
this.OnPropertyChanged("Item[]");
this.OnCollectionChanged(NotifyCollectionChangedAction.Add, item, index);
}
Rappelez-vous, la clé est de ne pas en substitution de la base de méthodes de Collecte, il est dans le fait que vous mettrez en œuvre de l'interface ICollection.Et franchement, plutôt que d'en hériter d'une classe de Collection, je dirais plutôt de créer une classe d'adaptateur qui prend un ICollection dans le constructeur et vos méthodes de juste délégué à l'intérieur de la collecte et de lever les événements appropriés.