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 :

HierarchicalDataTemplate et Treeview


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 42
    Par défaut HierarchicalDataTemplate et Treeview
    Bonjour,

    j'utilise un HierachicalDataTemplate pour pouvoir construire de manière générique mes arbres. Du coup dans le code, je me retrouve juste avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyArbreTest.ItemsSource = myList;
    (myList étant une liste d'éléments possédant une propriété "Header", et une "Children" me permettant de construire l'arborescence)

    Mon arbre se construit tout seul., pas de problème.
    Maintenant, j'aimerais savoir s'il est possible de définir une profondeur max pour mon arbre. (pour éviter qu'il soit trop gros, voire pour échapper à un possible StackOverflow dans le pire des cas)

    J'aurais voulu aussi avoir votre avis sur la notion de filtre. Vaut il mieux que je filtre ma liste (myList) avant ou y a t il des fonctions prévus à cet effet dans le TreeView?

    Merci.

  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,

    Ce que tu peux envisager c'est de faire du chargement à la demande (les fils ne sont chargés que sur l'expand du nœud en question).
    Il a des liens ici :
    http://www.codeproject.com/KB/WPF/Tr...ViewModel.aspx (§ Demo 2)
    http://social.msdn.microsoft.com/for...-568e89cb9f93/

    A noter que si tu fais un expand de tous les nœuds dès le départ ça ne changera pas ton problème.

  3. #3
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 42
    Par défaut
    Merci pour la réponse, mais puisque j'utilise le binding, ce n'est pas moi qui gère le chargement des noeuds

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <TreeView.Resources>
       <HierarchicalDataTemplate 
              DataType="{x:Type local:ITreeViewItem}" 
              ItemsSource="{Binding Path=Children}" >
              <DockPanel>
                      <Image SnapsToDevicePixels="True" Grid.Column="0" Source="{Binding ImageSource}" Width="16" Height="16" Margin="0,2,2,2"/>
                      <TextBlock x:Name="item" Grid.Column="1" Text="{Binding Header}" Margin="4,0,0,0"/>
              </DockPanel>
         </HierarchicalDataTemplate>
    </TreeView.Resources>
    Je n'ai aucun bout de code qui gère la construction de l'arbre.

    (peut etre ai-je mal saisi le sens de ta réponse...)

  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
    A mon avis, tu te prends la tête pour rien. Même si l'arbre est très profond, ça ne posera pas de problème de chargement, parce que les enfants de chaque noeud ne sont chargés que quand c'est strictement nécessaire. Donc au départ seul les noeuds racines et leurs enfants directs seront chargés.

    Il n'y a pas non plus de risque de StackOverflow, vu que ce n'est pas implémenté de façon récursive. Chaque binding est une "tâche" à traiter par le dispatcher, tout se fait de façon séquentielle, sans récursivité.

  5. #5
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 42
    Par défaut
    Citation Envoyé par tomlev Voir le message
    A mon avis, tu te prends la tête pour rien. Même si l'arbre est très profond, ça ne posera pas de problème de chargement, parce que les enfants de chaque noeud ne sont chargés que quand c'est strictement nécessaire. Donc au départ seul les noeuds racines et leurs enfants directs seront chargés.

    Il n'y a pas non plus de risque de StackOverflow, vu que ce n'est pas implémenté de façon récursive. Chaque binding est une "tâche" à traiter par le dispatcher, tout se fait de façon séquentielle, sans récursivité.
    Ha d'accord, je ne savais pas. J'avais peur que si, par exemple, je retombais dans mes listes enfants sur un noeud déjà présent dans l'arbre, ca parte en sucette.

    En tout cas, merci de vos réponses, je vais essayer de me débrouiller avec çà.

  6. #6
    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 ElBarto38 Voir le message
    J'aurais voulu aussi avoir votre avis sur la notion de filtre. Vaut il mieux que je filtre ma liste (myList) avant ou y a t il des fonctions prévus à cet effet dans le TreeView?
    Pour tout ce qui est filtre, le TreeView ne propose rien, c'est uniquement un contrôle d'affichage .

  7. #7
    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
    Pour le filtrage, le plus simple est d'utiliser ICollectionView :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var view = CollectionViewSource.GetDefaultView(myList);
    view.Filter = FilterItem;
     
    ...
     
    bool FilterItem(object o)
    {
        // renvoyer true pour afficher l'item, false pour ne pas l'afficher
        ...
    }

  8. #8
    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
    Pour tout ce qui est filtre, le TreeView ne propose rien, c'est uniquement un contrôle d'affichage .
    Pour le filtrage, le plus simple est d'utiliser ICollectionView :
    un pattern MVVM en quelque sorte...

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

Discussions similaires

  1. HierarchicalDataTemplate WPF TreeView à partir d'un menu récursif?
    Par hannnnnn dans le forum Windows Presentation Foundation
    Réponses: 18
    Dernier message: 19/11/2013, 12h26
  2. HierarchicalDataTemplate et treeview
    Par glebourg dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 10/11/2010, 20h50
  3. TreeView, HierarchicalDataTemplate et Binding depuis un DataSet
    Par dtcSearch dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 06/05/2010, 09h57
  4. TreeView + HierarchicalDataTemplate + RoutedEvent
    Par s3phi dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 03/12/2009, 09h52
  5. TreeView / HierarchicalDataTemplate / TreeViewItem : comment faire ?
    Par seiryujay dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 23/04/2009, 09h41

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