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 :

ICollectionView et filtres


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de titourock
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 156
    Par défaut ICollectionView et filtres
    Bonjour,

    J'ai une question concernant les ICollectionView.
    J'ai fait un exemple simple qui utilise une listbox bindée sur une ICollectionView que je souhaite filtrer ultérieurement. Jusque là que du basique mais lorsque j'essaye de filtrer avec un prédicat (item) => false, mes élements continuent de s'afficher alors que ce prédicat devrait me les "faire disparaître"...
    J'ai creusé quelques minutes et je suis tombé sur un résultat étrange...

    Lorsque j'initialise la vue de ma collection à partir d'un new CollectionView(Liste) le filtre ne fonctionne pas. En revanche, lorsque j'utilise ListeView = CollectionViewSource.GetDefaultView(Liste) le filtre fonctionne...

    Est-ce que quelqu'un pourrait m'aider sur ce petit mystère ?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    J'ai pas tout compris... montre un peu de code, ce sera plus clair

  3. #3
    Membre éprouvé Avatar de titourock
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 156
    Par défaut
    Voici mon XAML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <ListBox ItemsSource="{Binding ListeView}" IsSynchronizedWithCurrentItem="True"/>
            <Button Click="Button_Click"/>
    et voici le code C# :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public Window1()
            {
                DataContext = this;
                InitializeComponent();
                Liste = new ObservableCollection<string>();
                Liste.Add("a");
                Liste.Add("b");
                Liste.Add("c");
                Liste.Add("abc");
     
                ListeView = new CollectionView(Liste); // --> si je mets ceci, je n'arrive pas à filtrer
                //ListeView = CollectionViewSource.GetDefaultView(Liste); --> si je mets ceci j'arrive à filtrer     
            }
    où ListeView est de type ICollectionView et Liste une ObservableCollection...


    Et cliquer simplement sur le bouton applique le filtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void Button_Click(object sender, RoutedEventArgs e)
            {
                ListeView.Filter = (item) => false;
            }
    J'ajoute que j'ai essayé de retirer/remettre le "IsSynchronizedWithCurrentItem="True"" sans effet...

    Merci d'avance encore une fois

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Il ne faut pas créer explicitement une instance de CollectionView :
    Citation Envoyé par MSDN
    Vous ne devez pas créer d'objets de cette classe dans votre code
    http://msdn.microsoft.com/fr-fr/libr...ctionview.aspx

    La bonne façon de récupérer la ICollectionView associée à une collection est d'appeler CollectionViewSource.GetDefaultView.

    J'ajoute que j'ai essayé de retirer/remettre le "IsSynchronizedWithCurrentItem="True"" sans effet...
    Ca n'a pas de rapport avec le filtrage. Ca indique simplement si l'élément courant de la ListBox doit être synchronisé avec le CurrentItem de la ICollectionView

  5. #5
    Membre éprouvé Avatar de titourock
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 156
    Par défaut
    D'accord merci pour ces précisions. Cependant, si l'on doit utiliser CollectionViewSource.GetDefaultView(Liste) comment créer deux vues différentes de cette même liste ?
    Typiquement si je veux afficher dans deux listboxs différentes de la même source de données mais filtrée et/ou triée différemment ?

    Merci d'avance

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par titourock Voir le message
    Cependant, si l'on doit utiliser CollectionViewSource.GetDefaultView(Liste) comment créer deux vues différentes de cette même liste ?
    Typiquement si je veux afficher dans deux listboxs différentes de la même source de données mais filtrée et/ou triée différemment ?
    Bonne question... en fait, j'aurais fait comme toi, mais apparemment ça marche pas
    Sinon, tu peux essayer d'utiliser une des classes dérivées de CollectionView, par exemple ListCollectionView

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

Discussions similaires

  1. ICollectionview valeurs de filtres multiples
    Par Kanetsugu dans le forum C#
    Réponses: 3
    Dernier message: 19/09/2012, 10h10
  2. ICollectionView tri et filtre
    Par yonpo dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 23/03/2012, 09h20
  3. TADOTable et filtre
    Par GaL dans le forum C++Builder
    Réponses: 16
    Dernier message: 02/07/2002, 16h52
  4. Filtre passe Bande
    Par Mau dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 28/06/2002, 17h03
  5. Probleme de filtre dans bdd
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2002, 10h43

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