IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Utilisation de ObservableCollection


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut Utilisation de ObservableCollection
    Bonjour,

    quelles sont les differences entre utiliser une collection de donnees dynamiques (ObservableCollection) et une classe qui implemente INotifyPropertyChanged ?

    Merci à vous

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Je comprends pas trop la question à vrai dire. Les deux n'ont pas la même utilité. Une ObservableCollection n'est qu'un conteneur.

  3. #3
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    C'est un conteneur de donnees dynamique, mais faire une IList d'un objet implementant INotifyPropertyChanged cela reviendrait il au meme ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Cela revient au même à peu près.

    Pourquoi vouloir recréer la roue ?

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par topolino Voir le message
    C'est un conteneur de donnees dynamique, mais faire une IList d'un objet implementant INotifyPropertyChanged cela reviendrait il au meme ?
    Non!
    Implémenter un IList qui implémenterait INotifyCollectionChanged reviendrait à peu près au même (INotifyPropertyChanged sert uniquement pour notifier le changement de Count)

  6. #6
    Invité
    Invité(e)
    Par défaut
    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.

  7. #7
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    Moi => "au même à peu près"
    Nathanael => "à peu près au même"
    Effectivement, vous avez écrit à peu près la même chose

  8. #8
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Ok j'economise l'implementation donc, c'est bien ce que j'avais compris.

    Merci à vous

  9. #9
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Citation Envoyé par topolino Voir le message
    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 ;-)

  10. #10
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par jmix90 Voir le message
    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 ;-)
    En effet! Mais en plus ObservableCollection implémente INotifyPropertyChanged pour notifier quand la propriété Count prend une valeur différente

  11. #11
    Invité
    Invité(e)
    Par défaut
    Jmix90 merci pour ces précisions.

    Citation Envoyé par Nathanael Marchand Voir le message
    En effet! Mais en plus ObservableCollection implémente INotifyPropertyChanged pour notifier quand la propriété Count prend une valeur différente
    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.

  12. #12
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    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.
    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 C# : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
    }

  13. #13
    Invité
    Invité(e)
    Par défaut
    +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é.

    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.

  14. #14
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    +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é.

    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
    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[].

  15. #15
    Invité
    Invité(e)
    Par défaut
    Ok je vais me reposer je vois que le café que j'ai pris n'a rien servi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MVVM] ObservableCollection - 1ère utilisation rafraichissement view OK - 2ème KO
    Par _mama_ dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 16/04/2015, 09h26
  2. Utilisation d'entité avec INotiFyPropertyChanged et ObservableCollection
    Par takinelinfo dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 10/06/2011, 14h13
  3. Réponses: 2
    Dernier message: 22/07/2010, 12h11
  4. utilisation de ObservableCollection
    Par toss.net dans le forum C#
    Réponses: 1
    Dernier message: 12/01/2010, 17h54
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo