Bonjour,
quelles sont les differences entre utiliser une collection de donnees dynamiques (ObservableCollection) et une classe qui implemente INotifyPropertyChanged ?
Merci à vous
Version imprimable
Bonjour,
quelles sont les differences entre utiliser une collection de donnees dynamiques (ObservableCollection) et une classe qui implemente INotifyPropertyChanged ?
Merci à vous
Je comprends pas trop la question à vrai dire. Les deux n'ont pas la même utilité. Une ObservableCollection n'est qu'un conteneur.
C'est un conteneur de donnees dynamique, mais faire une IList d'un objet implementant INotifyPropertyChanged cela reviendrait il au meme ?
Cela revient au même à peu près.
Pourquoi vouloir recréer la roue ?
Moi => "au même à peu près"
Nathanael => "à peu près au même"
J'ouvre mon Bescherelle pour vérifier pour voir la différence parce que moi je n'en vois pas. :lol:
Ok j'economise l'implementation donc, c'est bien ce que j'avais compris.
Merci à vous
Vous parlez en fait de deux choses différentes. Attention de ne pas confondre INotifyCollectionChanged et INotifyPropertyChanged. La première notifie des changements dans une collection(ajout, suppression, déplacement) et la seconde notifie des changements de valeur d'une propriété donnée d'une instance d'une classe.
Est-ce plus clair ainsi ?
Bon courage sur la voie de WPF ;-)
Jmix90 merci pour ces précisions.
Là où je suis je ne peux pas tester si ce que tu dis est vrai ou pas mais t'es sûr que l'interface INotifyPropertyChanged est impémenté pour qu'on puisse rendre la propriété Count notifiante parce qu'il y a quelques mois tu avais dit ça qui correspond au contraire ( bon il s'agit de WP7 et là de WPF).
OK je vais tester ce soir. :ccool:
Celui de List<T> n'est pas notifiant et j'avais émis l'hypothèse que celui de ObservableCollection<T> l'était peut être (cf dernier post). Depuis j'ai vérifié et utilisé la chose :)
Exemple pour un Remove:
Code:
1
2
3
4
5
6
7
8
9 protected override void RemoveItem(int index) { this.CheckReentrancy(); T t = base[index]; base.RemoveItem(index); this.OnPropertyChanged("Count"); this.OnPropertyChanged("Item[]"); this.OnCollectionChanged(NotifyCollectionChangedAction.Remove, t, index); }
+1
Cool Par défaut elle ne notifie pas son changement.
Donc il va falloir tripatouiller en redéfinissant les méthodes Add et Remove en notifiant dans les implémentations que la propriété a changé. :ccool:
Du coup INotifyPropertyChanged est là pour autre chose je pense. Qui sait ? Peut-être que l'équipe .Net a juste mis l'interface pour que ça soit dispo au cas où elle en aurait besoin. ;)
On s'est mal compris je pense :mrgreen:
List<T> ne notifie rien du tout.
ObservableCollection<T> notifie via CollectionChanged et aussi via un PropertyChanged de Count. Cependant un controls dérivant de ItemsControl il s'en fout un peu du Count qui change, il écoute CollectionChanged :)
Le code que j'ai mis c'est la décompilation du Remove de ObservableCollection et on voit bien qu'il lève l'évènement pour Count et Item[].
Ok je vais me reposer je vois que le café que j'ai pris n'a rien servi
:D