2009-10-05 4 views
1

J'espère que la réponse est aussi simple que la question, mais j'ai besoin d'écrire un événement pour une classe qui implémente une SortedList.Implémenter un événement pour un changement dans une SortedList

Y a-t-il un moyen de créer un gestionnaire d'événements à chaque fois que cette liste change (Ajouter, Modifier, Supprimer)? Les méthodes Add() et autres ne sont pas redondantes.

Merci!

Répondre

2

Non, il n'y en a pas. La meilleure façon d'obtenir ce type de comportement est de créer une nouvelle classe qui enveloppe un SortedList<T>, expose un ensemble de méthodes similaires et a des événements correspondants pour les méthodes qui vous intéressent.

public class MySortedList<T> : IList<T> { 
    private SortedList<T> _list = new SortedList<T>(); 
    public event EventHandler Added; 
    public void Add(T value) { 
    _list.Add(value); 
    if (null != Added) { 
     Added(this, EventArgs.Empty); 
    } 
    } 
    // IList<T> implementation omitted 
} 
+0

probablement mieux d'utiliser les interfaces existantes, à savoir: INotifyCollectionChanged –

+0

@Reed, convenu en fonction du scénario. Mais si l'OP veut des événements pour la modification alors oui INotifyCollectionChanged est probablement un autre sur ethat qui devrait être implémenté. – JaredPar

1

Au lieu d'hériter de SortedList, vous devez l'encapsuler. Faites votre classe implémente les mêmes interfaces, en plus de INotifyCollectionChanged:

public class MySortedList<TKey, TValue> : IDictionary<TKey, TValue>, 
    ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, 
    IDictionary, ICollection, IEnumerable, INotifyCollectionChanged 
{ 
    private SortedList<TKey, TValue> internalList = new SortedList<TKey, TValue>(); 

    public void Add(TKey key, TValue value) 
    { 
     this.internalList.Add(key,value); 
     // Do your change tracking 
    } 
    // ... implement other methods, just passing to internalList, plus adding your logic 
} 
Questions connexes