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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top