Démystification de l'ObservableCollection<T>

On prend souvent ObservableCollection<T> pour ce qu'elle n'est pas : ce type de collection n'est pas conçu pour superviser tous les changements de propriétés de ses items. Il permet simplement de savoir, via NotifyCollectionChangedEventArgs, si des modifications ont été effectuées sur la composition de sa collection interne (ajout, suppression, remplacement, déplacement ou réinitialisation de ses items). En d'autre mots, le changement d'une propriété d'un des items de la collection ne déclenche pas l'évènement ObservableCollection<T>.NotifyCollectionChanged.

Implémenter une collection permettant d'être notifié à la fois des changements de composition et des propriétés des items membres est simple. Charles Petzold propose d'ailleurs une telle implémentation  dans le MSDN Magazine de Septembre 2008, la nommant ObservableNotifiableCollection<T> . Le principe consiste à s'abonner à CollectionChanged, puis ensuite à l'évènement PropertyChanged du ou des items ajoutés. Veillez cependant à utiliser cette classe avec précaution : les performances de votre application pouvant être affectées par le nombre élevé de notifications potentielles !