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

C# Discussion :

[Xaml] Binding Treeview optimisé


Sujet :

C#

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Points : 341
    Points
    341
    Par défaut [Xaml] Binding Treeview optimisé
    Bonjour,

    J'utilise avec WPF un contrôle TreeView dont la source des données est bindé sur une arborscence d'objet de mon application.

    Par exemple,

    + item 1
    + item 2
    + item 3

    et j'ai dans mon application des objets item1, item2 et item3. Ces objets ont des fils (afin de créer un structure d'arbre) :

    - item 1
    + item1.1
    + item1.2
    + item2
    + item3

    mon problème, c'est qu'en procédant comme ça, au lancement de mon application et avec le premier affichage (aucun noeud de déplié) et bien je charge quand même tous les fils de item1 item2 et item3.

    et ça prend beaucoup trop de temps, je préfererai les charger dynamiquement quand l'utilisateur déplis un noeud.

    quelqu'un aurait-il une piste pour réaliser cela ?

    merci d'avance,

    Jérémy
    www.japf.fr mon blog sur WPF et .Net

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Il y a un bug dans l'implémentation du Treeview actuel il me semble (car je ne sais plus si c'est bien le treeview qui a ce bug).

    Pour accélerer le chargement, il faut modifier le template pour rajouter un virtualizingpanel: regarde un peu du coté de Google

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Points : 341
    Points
    341
    Par défaut
    En fait, d'après ce que j'ai lu un virtualizingpanel me permet d'améliorer les performances en ne chargeant que ce qui est visible depuis l'IHM.

    Dans mon cas, je cherche à faire quelque chose d'un peu différent, tout du moins il me semble.

    Quand mon TreeView s'affiche au chargement du mon application, j'ai ça :

    + Item1
    + Item2
    + Item3

    Les noeuds qui sont derrières ces items de premiers niveau ont déjà été chargés, et c'est ça qui prend beaucoup de temps dans mon cas.

    J'aurai besoin en fait, d'éviter ce chargement, et de mettre des noeuds "inutiles" dans Item1, Item2 et Item3 tant qu'ils ne sont pas déployés afin d'accelérer le chargement.

    Je voudrai qu'ensuite, lorsqu'on déploit Item1, cela lance la recherche dans ma base de donnée, pour afficher les vrais fils de Item1 (et pas le noeud "Inutile" que j'aurai ajouté au départ juste pour pouvoir autoriser le dépliement du noeud).

    Je ne sais pas trop comment m'y prendre, car avec WPF, le TreeView n'a plus de propriété OnBeforeExpand. J'ai trouvé ce lien : http://forums.microsoft.com/MSDN/Sho...89446&SiteID=1 mais je ne sais pas si cela va suffire à résoudre mon problème.

    Merci d'avance,
    Jérémy
    www.japf.fr mon blog sur WPF et .Net

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par Jérem22 Voir le message
    Je voudrai qu'ensuite, lorsqu'on déploit Item1, cela lance la recherche dans ma base de donnée, pour afficher les vrais fils de Item1 (et pas le noeud "Inutile" que j'aurai ajouté au départ juste pour pouvoir autoriser le dépliement du noeud).
    Oui, mais tu risques d'avoir le même pb de temps de chargement.

    Sinon, tu peux aussi regarder l'article d'ici: http://www.beacosta.com/Archive/2007...a_archive.html

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Points : 341
    Points
    341
    Par défaut
    Le temps de chargement sera pratiquement invisible pour l'utilisateur, car ce qui me prend du temps ce n'est pas de chercher les fils pour Item1, mais de le faire pour Item1 à Item100

    J'ai vu l'article de Beatriz Costa hier, mais pour l'instant, il n'y a que la première partie dans laquelle il constate les problèmes, il n'apporte pas encore de solution.

    Je pense que ma solution avec un noeud "inutile" qu'on remplace lors du dépliement est bonne, car je sais que c'était appliqué avec les WinForms classiques.

    La question est de savoir comment je dois m'y prendre avec WPF pour faire la même chose.
    www.japf.fr mon blog sur WPF et .Net

  6. #6
    Membre averti
    Avatar de UNi[FR]
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 340
    Points : 448
    Points
    448
    Par défaut
    J'ai un petit exemple qui te montre deux methodes différentes pour le chargement d'une TreeView l'un ou l'on charge tout et l'autre ou l'on charge à la volé, ca pourra peut etre t'intéressé

    http://unid.phpnet.org/screenshots_f...erformance.zip
    Gnarf !
    Mon C.V.
    Culture agile && Software Craftsmanship && (.NET {VS 2019 && WPF} || PHP {(PHPStorm || VS Code) && (Docker)})

    Pensez au TAG

Discussions similaires

  1. nhibernate binding treeview
    Par alacaraibe dans le forum NHibernate
    Réponses: 1
    Dernier message: 24/06/2009, 15h11
  2. bind treeview apres selectvalue du dropdown
    Par smp82 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/05/2009, 13h49
  3. Binding TreeView hiérarchique
    Par thelpi dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 18/12/2008, 12h01
  4. [XAML] Binding de plusieurs ComboBox dans une ListBox
    Par thelpi dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 08/12/2008, 09h17
  5. [xaml] Bind sur le titre d'une page
    Par despeludo dans le forum Framework .NET
    Réponses: 6
    Dernier message: 21/03/2007, 09h07

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