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 :

Affichage d'inforamtion imbriqué


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 30
    Points : 15
    Points
    15
    Par défaut Affichage d'inforamtion imbriqué
    Bonjour,
    Je cherche à faire une représentation récursif de donnée en wpf. Par exemple,
    si on prend un type struct en C contient plusieurs champs de type différents mais peux aussi contenir un champs de type struct! Donc comment le représenter dans une interface graphique en WPF ?
    Si vous voyez ce que je veux dire...
    Le problème est de pouvoir faire un affichage avec des champs de type différents et d'avoir un problème d'affichage récursif en cas d'un champs struct ou union par exemple.

  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
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    Le TreeView semble adapté. Il gère l'affichage hiérarchique. Un exemple ici :
    http://www.codeproject.com/KB/WPF/Tr...ViewModel.aspx

    Un TreeListView peut aussi faire l'affaire dans le cas d'un affichage avec des colonnes :
    http://windowsclient.net/blogs/ricci...w-control.aspx

  3. #3
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Avec un TreeView, un HierarchicalDataTemplate et un convertisseur qui renvoie la liste des membres, ça peut se faire...

    Un exemple :

    Convertisseur
    Code C# : 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
        public class MemberListConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                if (value == null)
                    return null;
                return MemberValues(value).ToDictionary(t => t.Item1, t => t.Item2);
            }
     
            private static IEnumerable<Tuple<string, object>> MemberValues(object obj)
            {
                var members = obj.GetType().GetMembers(BindingFlags.Instance | BindingFlags.Public);
                foreach (var m in members)
                {
                    var p = m as PropertyInfo;
                    var f = m as FieldInfo;
                    if (p != null && p.GetIndexParameters().IsNullOrEmpty())
                    {
                        yield return Tuple.Create(p.Name, p.GetValue(obj, null));
                    }
                    else if (f != null)
                    {
                        yield return Tuple.Create(f.Name, f.GetValue(obj));
                    }
                }
            }
     
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }

    XAML
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <Window ...>
        <Window.Resources>
            <local:MemberListConverter x:Key="memberConverter" />
        </Window.Resources>
        <Grid>
            <TreeView ItemsSource="{Binding Items}">
                <TreeView.ItemTemplate>
                    <HierarchicalDataTemplate DataType="sys:Object" ItemsSource="{Binding Value, Converter={StaticResource memberConverter}}">
                        <TextBlock Text="{Binding}" />
                    </HierarchicalDataTemplate>
                </TreeView.ItemTemplate>
            </TreeView>
        </Grid>
    </Window>

    Code-behind
    Code C# : 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
        public partial class Window1 : Window
        {
            public Window1()
            {
                InitializeComponent();
                Items = new Dictionary<string, object>
                {
                    { "x", new Person { FirstName = "John", LastName = "Doe", Age = 32 } },
                    { "y", new Foo() },
                    { "z", new Bar() }
                };
                this.DataContext = this;
            }
     
            public Dictionary<string, object> Items { get; private set; }
        }

    (j'utilise un Dictionary pour associer les noms des membres et leurs valeurs)

    Evidemment c'est pas très joli, mais c'est juste pour montrer le principe...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 30
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Avec un TreeView, un HierarchicalDataTemplate et un convertisseur qui renvoie la liste des membres, ça peut se faire...
    Oui je pense en effet que le treeview sera très bien pour mon problème! Il me semble que dans ton exemple tu utilise des lambda expression, je suis pas vraiment encore aller voir ça donc pas encore trop compréhensible pour moi.
    Aurais-tu un screenshot de ton exemple en execution par hazard ?
    Sinon les liens binoo sont aussi très intéressant, faudra que j'essaie tout ça

  5. #5
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par laurent_r Voir le message
    Il me semble que dans ton exemple tu utilise des lambda expression, je suis pas vraiment encore aller voir ça donc pas encore trop compréhensible pour moi.
    Y a rien de très compliqué, je convertis juste une séquence de Tuple en un Dictionary. La première expression lambda sélectionne la clé (Item1), et la seconde sélectionne la valeur (Item2)

    Citation Envoyé par laurent_r Voir le message
    Aurais-tu un screenshot de ton exemple en execution par hazard ?
    Pas au bureau vu que j'ai fait ça chez moi... Mais tu peux tester le code, c'est pas long. Tu peux remplacer les objets Person, Foo et Bar par ce que tu veux

Discussions similaires

  1. Affichage d'iframes imbriquées
    Par Danou12 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/05/2014, 10h26
  2. Affichage de liste imbriqué
    Par Nico87 dans le forum Wicket
    Réponses: 4
    Dernier message: 18/03/2010, 14h48
  3. [MySQL] affichage de tableau imbriqué résultant de requêtes
    Par jniarrivepa dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/03/2007, 12h31
  4. [MySQL] Affichage requête imbriquée
    Par sql dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 07/04/2006, 21h48
  5. Réponses: 7
    Dernier message: 06/03/2006, 15h38

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