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 :

Alternative à VisualTree ?


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    196
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 196
    Par défaut Alternative à VisualTree ?
    Bonjour

    J'utilise la classe VisualTreeHelper pour récupérer des éléments générés via Template. Voici la fonction en question, récupérée d'un exemple MS :

    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
     
    public static childItem FindVisualChild<childItem>(this DependencyObject obj) where childItem : DependencyObject
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                    if (child != null && child is childItem)
                        return (childItem)child;
                    else
                    {
                        childItem childOfChild = FindVisualChild<childItem>(child);
                        if (childOfChild != null)
                            return childOfChild;
                    }
                }
                return null;
            }
    Le problème, c'est que je m'en sers par exemple pour récupérer les ListViewItem d'une ListView qui a une barre de défilement. D'où explosion du code : le GetChild ne peux pas aller chercher les items qui sont masqués car hors de la "zone de défilement".

    Ce qui n'empêche qu'il me les faut tous... une idée ?

  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,

    Le listView a cet avantage (d'un point de vue mémoire) de ne charger les éléments que s'ils sont visibles (ou ont été "scrollé" et le sont devenus). C'est ce qu'on appelle l'UI virtualization
    Ce comportement est aussi offert par la ListBox.

    Ça c'était juste la raison du pourquoi

    Après pour ton problème, il faudrait savoir ce que tu veux faire exactement. Tu récupères les items pour faire quoi exactement ? Est-ce que tu ne peux pas récupérer uniquement la liste des items via la propriété Items (ou ItemsSource) ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    196
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 196
    Par défaut
    Well, mes ListView sont générés via DataTemplate. Ce DataTemplate contient entre autre une checkbox, qui est donc inaccessible via Items[x] vu que ce dernier renvoie l'objet logique à l'origine du datatemplate.

    D'où la récupération des éléments graphiques, notamment lors du chargement de la liste dans le but de cocher / décocher les checkbox qui doivent l'être.

  4. #4
    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
    La solution que tu utilises n'est peut-être pas la bonne alors (tout du moins je vois pas de solution comme ça dans l'immédiat).

    Est-ce que tu ne pourrais pas ajouter une propriété "EstCoche" (un booléen) à l'objet que tu charges au niveau de chaque Item et du coup utiliser un Binding sur cette propriété ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    196
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 196
    Par défaut
    Non, l'objet est issu du designer LINQ donc je peux pas me permettre ce genre de bidouillage.
    En fait, au dessus de ma liste j'ai une ComboBox pour sélectionner un Objet A. Une ligne représente un Objet B. Si la CheckBox est cochée, ça signifie que A est en relation avec B.

    Visuellement c'est intuitif. Côté dev, c'est la guerre :S


    (HS : 100ème post, en bugguant \o/ )

  6. #6
    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
    Ok,

    et il est possible d'étendre (ou bidouiller ) un objet Linq en utilisant le principe des classes partielles.

    En attendant une meilleure idée...

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  2. Alternative au dbms_output ?
    Par dam1311 dans le forum Oracle
    Réponses: 10
    Dernier message: 24/11/2004, 08h11
  3. [xsl] alterner de style entre deux apply-template
    Par laouache dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 23/04/2004, 11h49
  4. Alternative(s) a CVS
    Par MrSimon dans le forum SCM
    Réponses: 3
    Dernier message: 06/03/2004, 11h37
  5. [FORMATION] Formations par alternance
    Par chobol dans le forum Etudes
    Réponses: 10
    Dernier message: 20/02/2004, 11h28

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