2010-06-04 22 views
0

J'ai une question à propos d'une classe que j'ai créée et qui est similaire à ObserverableCollection. Ma classe a essentiellement la même fonctionnalité que celle-ci, mais j'ajoute des fonctions de tri automatique lorsque des éléments sont ajoutés à la liste. Ma question est que ma classe implémente l'interface INotifyCollectionChanged afin que ListView, qui affiche ma collection, soit notifié quand la collection change (du moins c'est ce que je pensais). Chaque fois que j'ajoute ou retire de la collection, j'avise que la collection a changé, mais le ListView n'affiche pas les changements. Donc ai-je manqué interprété ce que INotifyCollectionChanged fait? Dois-je utiliser INotifyPropertyChanged à la place? Toute aide sur la question serait géniale!Custom ObservableCollection

Voici les parties importantes de ma classe:

public class AscendingObservableCollection<T> : ICollection<T>, IEnumerable<T>, INotifyCollectionChanged 
{ 

public event NotifyCollectionChangedEventHandler CollectionChanged; 
... 
protected void OnCollectionChanged() 
    { 
     CollectionChanged.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); 
    } 
} 

j'appelle OnCollectionChanged() à chaque fois que la collection change (article ajouter/supprimer). J'utilise NotifyCollectionChangedAction.Reset pour tous les changements car ma collection est un LinkedList et le constructeur NotifyCollectionChangedEventArgs a besoin d'un index pour les drapeaux NotifyCollectionChangedAction.Add/Remove qu'une LinkedList n'a généralement pas.

Ma ListView qui utilise la collection utilise Databinding sur la propriété ItemSource pour accéder à la collection.

Si vous avez besoin de plus de code faites le moi savoir.

+0

Vous ne devriez pas appeler 'Invoke'; C'est beaucoup plus lent qu'un appel de délégué normal. – SLaks

+0

Oh? que devrais-je utiliser à la place, BegingInvoke() et EndInvoke()? – Josh

+2

Que diriez-vous de CollectionChanged (ceci, nouvelle nouvelle NotifyCollectionChangedEventArgs (NotifyCollectionChangedAction.Reset)) –

Répondre

0

Ok J'ai résolu le problème après beaucoup d'étapes de débogage et de recherche. Il s'est avéré que le truc de Notify fonctionnait, mais j'avais un petit bug dans l'autre partie de mon code qui le faisait casser. Merci à tous!