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 :

[WPF] filtrer un treeview


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut [WPF] filtrer un treeview
    Bonjour,

    J'aimerais applique un filtre à un treeview de la façon suivante :
    Un TreeviewItem est masqué à chaque fois que son texte contient une certaine valeur et qu'il ne contient pas d'élément qui ne sont pas masqué.
    Le problème que j'ai est pour parcourir la hiérarchie des TreeviewItem de mon Treeview.
    La seule façon que j'ai trouvé est d'utiliser monTreeviewItem.ItemContainerGenerator.ContainerFromIndex() pour récupérer un TreeviewItem enfant. Puis je pars en récursivité pour afficher/masquer tous les TreeviewItems de mon treeview.
    J'ai peur que la façon de récupérer mes TreeviewItems soit un peu lente et j'aimerais savoir si il existe une meilleure solution pour réaliser ce genre de filtre.

    Merci d'avance pour vos conseils,

    mathmax

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Vu ton scénario, je pense que la technique que tu utilises est la mieux.

    Sinon, tu peux envisager d'utiliser un Trigger mais je ne pense pas que cela réponde à tous tes besoins.

  3. #3
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    En fait ça ne marche pas encore... J'ai un problème c'est que parent.ItemContainerGenerator.ContainerFromIndex(i) ne me renvois pas toujours une valeur alors qu'il le devrait. J'ai à ce propos lu l'article intitulé Comment sélectionner un item dans un Treeview lié à une Collection/ObservableCollection ? dans lequel tu expliques qu'il faut ajouter un TreeviewItem dans le XAML pour corriger ce problème, mais ça n'a rien changé. Le problème tient put être du fait que j'utilise un HierarchicalDataTemplate pour afficher les donnée de mon treeview.. (en plus l'ajout d'un treeviewItem me fait des doubles croix de déploiement pour chaque ligne ce qui est assez moche). Voici mon code XAML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
            <HierarchicalDataTemplate DataType="{x:Type app:HierarchyCategory}" x:Key="template">
                <HierarchicalDataTemplate.ItemsSource>
                    <MultiBinding Converter="{StaticResource MyConverter}">
                        <Binding Path="Categories" />
                        <Binding Path="Products" />
                    </MultiBinding> 
                </HierarchicalDataTemplate.ItemsSource>
                <TreeViewItem IsExpanded="True">
                    <TextBlock FontSize="16" FontWeight="Bold" Foreground="MidnightBlue"  Text="{Binding Path=Name}" />             
                </TreeViewItem>
            </HierarchicalDataTemplate>
            <DataTemplate DataType="{x:Type app:HierarchyProduct}">
                <TreeViewItem IsExpanded="True">
                    <StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
                        <Button BorderThickness="1">
                            <Ellipse Fill="#1173b3" Height="8" Width="12" />
                        </Button>                
                        <TextBlock  FontSize="12" FontStyle="Italic" FontWeight="bold" Text="{Binding Path=Name}" />
                    </StackPanel>
                </TreeViewItem>
            </DataTemplate>
    [Edit] je viens de trouver le poste suivant :
    http://www.developpez.net/forums/sho...d.php?t=431533 dans lequel UNi[FR] semble avoir le même problème que moi. La méthode ContainerFromIndex() ne marche qu'au premier niveau. Pourquoi ? Comment y remédier ?

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Je dois admettre que je ne comprend plus trop

    Tu pourrais réexpliquer avec, si possible, une image du problème ?

  5. #5
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    Le problème que j'ai est le suivant : Je n'arrive pas à récupérer les TreeviewItem situé au niveau supérieur à 1 (en profondeur). Ici , il semble y avoir le même problème. Dans l'article cité ci-dessus, tu expliquais qu'il fallait s'assurer que les éléments enfant d'un treeview soit bien des TreeviewItem car en WPF on peut redéfinir les contenus. Pour cela, j'ai encapsulé le contenu de mes HierarchicalDataTemplate et DataTemplate avec un élément TreeviewItem (cf. le code XAML ci dessus), mais ça ne résout pas le problème. Ca rajoute même un problème d'affichage : les croix de déploiement sont doublées :


    Voilà, donc tout le problème est de parcourir les treeviewItem de mon treeview et en particulier de retrouver tous les treeviewItem enfants d'un treeviewItem.

    En espérant avoir été plus clair.

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/01/2011, 10h48
  2. WPF Filtrer sur un Binding
    Par toss.net dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 13/01/2010, 17h33
  3. filtrer un treeview
    Par yan500 dans le forum Qt
    Réponses: 4
    Dernier message: 11/12/2007, 16h45
  4. [WPF] Déplier un TreeView
    Par UNi[FR] dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 22/11/2007, 15h19
  5. Réponses: 2
    Dernier message: 21/09/2007, 18h28

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