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 :

ObservableCollection<T>.CollectionChanged à travers un ListCollectionView ?


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Par défaut ObservableCollection<T>.CollectionChanged à travers un ListCollectionView ?
    Bonjour,

    Je crée un ListCollectionView à partir d'un ObservableCollection<T>.
    Je charge un Datagrid à partir du ListCollectionView.

    Ainsi, le filtrage fonctionne dans le Datagrid, et les éléments ajoutés à ObservableCollection<T> apparaissent bien dans ce même Datagrid.

    Par contre, j'ai un souci quand je modifie une colonne du Datagrid (liée à une propriété d'un objet qui implémente INotifyPropertyChanged), l'événement PropertyChanged est bien levé mais cela ne lève pas l'événement CollectionChanged de mon ObservableCollection<T>.

    Est-ce normal ? Si oui, comment déterminer que ma ObservableCollection<T> a été modifiée sans avoir à m'abonner à l'événement PropertyChanged de tous les éléments qu'il contient ?

    Merci d'avance pour l'éclaircissement

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    Pas de réponse dans ce post, mais quelque chose qui confirme ce que tu as observé.

    Le lien suivant confirme ce que tu dis : http://mikestedman.blogspot.com/2008...onchanged.html
    La conclusion à tirer est que lorsqu'une propriété de l'objet de la collection est changée, on ne passe pas dans ObservableCollection<T>.CollectionChanged.

    Le lien vers la documentation qui précise pourtant que l'évènement devrait être levé lors de la modification :
    http://msdn.microsoft.com/fr-fr/library/ms653375.aspx

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Par défaut
    Aïe.

    Merci pour cette réponse rapide, au moins c'est clair.

    Je vais donc devoir surveiller ça depuis le Datagrid (ça me parait impensable de m'abonner à tous les objets implémentant INotifyPropertyChanged).

    Si quelqu'un a trouvé une solution plus élégante à une situation similaire, je suis toujours preneur.

    Bonne journée

  4. #4
    Membre expérimenté
    Avatar de SoBaKa
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Par défaut
    C'est tout à fait normal que l'évènement "CollectionChanged" ne soit pas activé, il n'y a pas eu d'ajout ou suppression dans cette collection. Il me semble que ça a toujours fonctionner ainsi (BindingList, ...)

    Par contre il serait bête de passer par des événement du DataGrid pour savoir si un élément à été modifier.

    Pourquoi ne pas récupérer un CollectionView de ton ObservableCollection et la, il y a bien un évènement CurrentChanged...

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Citation Envoyé par SoBaKa
    C'est tout à fait normal que l'évènement "CollectionChanged" ne soit pas activé, il n'y a pas eu d'ajout ou suppression dans cette collection. Il me semble que ça a toujours fonctionner ainsi (BindingList, ...)
    Pas selon la doc msdn qui dit :
    Citation Envoyé par msdn
    Se produit lorsqu'un élément est ajouté, supprimé, modifié, déplacé ou lorsque la liste entière est actualisée.


    Citation Envoyé par SoBaKa
    Pourquoi ne pas récupérer un CollectionView de ton ObservableCollection et la, il y a bien un évènement CurrentChanged...
    Je me demande si le problème ne sera pas le même. Quand la sélection va changer, là on va passer dans l'évènement Currentchanged, mais quand il va être modifié, je ne suis pas sûr.
    A tester en tout cas .

  6. #6
    Membre expérimenté
    Avatar de SoBaKa
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Par défaut
    On parle d'élément modifié au niveau de la collection et pas d'une propriété modifiée d'un élément, ce qui est différent (même si je l'accorde que ca semblerais logique).

    si tu fais quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaCollection[0] = new Object();
    ton élément 0 de ta collection a été modifié donc l'événement CollectionChanged sera bien enclenché.

    Citation Envoyé par binoo
    Je me demande si le problème ne sera pas le même. Quand la sélection va changer, là on va passer dans l'évènement Currentchanged, mais quand il va être modifié, je ne suis pas sûr.
    A tester en tout cas .
    Il est vrai que la documentation de MSDN me fait douter en ce moment. Je vais faire une petite vérification et je vous tiens informé.

    EDIT:

    Bah non binoo a raison et ça ne prend pas en compte les modifications. Bizarre, je suis quasi sur de l'avoir déjà fait mais je ne sais plus comment maintenant... :/

Discussions similaires

  1. [MVVM] implémentation de l’évènement CollectionChanged de ObservableCollection
    Par maradona_9 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 05/10/2012, 21h19
  2. ObservableCollection CollectionChanged ?
    Par mickeybond dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 02/03/2012, 13h23
  3. Commandez vos livres à travers developpez.com
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 19
    Dernier message: 29/04/2011, 09h36
  4. lancer une appli a travers une autre appli
    Par tazamorte dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/04/2004, 11h08
  5. [CR] Tranfert de formulaire a travers une page HTMl
    Par LIEU dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 12/09/2002, 08h37

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