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 :

Incrementer une List<T> avec T dans boucle for each


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien d'étude
    Inscrit en
    Juin 2015
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien d'étude

    Informations forums :
    Inscription : Juin 2015
    Messages : 87
    Par défaut Incrementer une List<T> avec T dans boucle for each
    bonjour

    j'ai une classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     public class Batiment
        {
            public Batiment(string name)
            {
                this.Name = name;
            }
            public string Name { get; private set; }
            readonly List<Etage> _etage = new List<Etage>();
            public List<Etage> Etage
            {
                get { return _etage; }
            }
        }
    A partir d'un Ienumerable<string>"GetBatiment" j'aimerais alimenter une Liste<T> avec nouveau <T> pour construire un treeview

    >Batiment A
    >Batiment B
    >Batiment C

    etc ...
    Si je fais cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListBatiment = new List<Batiment> { new Batiment("A"), new Batiment("B") };
    Cela Marche bien mais c'est pas ce que je cherche

    si je fais cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      foreach (var gae in getbatiment)
              {
     
                    ListBatiment = new List<Batiment> { new Batiment(gae)};
            }
    il me donne le dernier membre, ce que je trouve logique puisque qu'il recrée une nouvel liste à chaque fois

    par contre si je fais cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ListBatiment = new List<Batiment>();
    foreach (var gae in getbatiment)
              {
     
                   ListBatiment.Add(new Batiment(gae));
            }
    mon treeview ne me retourne rien.
    Je comprends pas trop

    xmal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    <HierarchicalDataTemplate ItemsSource="{Binding Etage}" DataType="{x:Type model:Batiment}">
                <Label Content="{Binding Name}"/>
            </HierarchicalDataTemplate>
     
     
    <TreeView ItemsSource="{Binding ListBatiment}">
    </TreeView>
    Pouvez vous m'aider ?

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour

    Le code liant le class Etage au class Batiment semble pipé !!!
    De plus la laison doit etre recursive ,ce qui n'est une petite promenade....

    Bref ton code data devrait etre :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
    namespace WpfBatiments
    {
        public class Etage
        {
            public Etage(string name)
            {
                this.Name = name;
            }
            public string Name { get; private set; }
     
        }
        public class Etages:List<Etage>
        {
            public Etages()
            { }
     
        }
        public class Batiment
        {
            public Batiment(string name)
            {
                this.Name = name;
            }
            public string Name { get; private set; }
            readonly Etages _etages = new Etages();
            public Etages Etages
            {
                get { return _etages; }
            }
        }
        public class Batiments : List<Batiment >
        {
            private Random rndEtage = new Random();
            public Batiments()
            {
                this.AddRange(new List<Batiment> { new Batiment("A"), new Batiment("B"), new Batiment("C"), new Batiment("D") });
                foreach (var item in this)
                {
                    AddEtage(item);
                }
     
            }
            public void AddEtage(Batiment b)
            {
                for (int i = 1; i < rndEtage.Next(5,11); i++)
                {
                   Etage etage = new Etage ("Etage" + i.ToString());
                    b.Etages.Add(etage);
     
                }
     
            }
     
        }
    }
    ton code xaml également devrait etre revu pour inclure un -DataTemplate en plus du HierarchicalDataTemplate - destinée au "dernier des mohicans" (BottomMost) ou Dernier Node de la structure récursive Batiment-Etage...
    code xaml revu du form:

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    <Window x:Class="WpfBatiments.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfBatiments" 
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <local:Batiments x:Key="src"/>
            <HierarchicalDataTemplate  DataType="{x:Type local:Batiment}"
                                      ItemsSource="{Binding Etages}">
                <Label Content="{Binding Name}"/>
            </HierarchicalDataTemplate>
            <DataTemplate  DataType="{x:Type local:Etage}"
                                      >
                <Label Content="{Binding Name}"/>
            </DataTemplate>
        </Window.Resources>
        <Grid>
            <TreeView ItemsSource="{Binding Source={StaticResource src}}">
            </TreeView>
            <!--si tu veux un en-tete global,il injecter un TreeViewItem bindé-->
            <!--<TreeView >
                <TreeViewItem
                    Header="Batiments"
                    IsExpanded="true"
                    ItemsSource="{Binding Source={StaticResource src}}">
     
                </TreeViewItem>
            </TreeView>-->
        </Grid>
    </Window>
    bon code...

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien d'étude
    Inscrit en
    Juin 2015
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien d'étude

    Informations forums :
    Inscription : Juin 2015
    Messages : 87
    Par défaut
    bonjour Mabrouki

    Tout d'abord merci pour ta réponse

    Effectivement je n'ai pas inclus ma class Etage dans mon code car pour le moment je butais avec le premier niveau de mon treeview a savoir Batiment.
    Je n'ai pas précisé mais je travaille en MVVM sur un UserControl

    et tu me mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.AddRange(new List<Batiment> { new Batiment("A"), new Batiment("B"), new Batiment("C"), new Batiment("D") });
    mais c'était juste un exemple, je veux récupérer le nom des bâtiments en dynamique lié à un xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <Enregistrement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" TypeEnregistrement="APS" Batiment="A" Etage="RdC" Local="001" >
    <Enregistrement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" TypeEnregistrement="APS" Batiment="A" Etage="RdC" Local="002">
    <Enregistrement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" TypeEnregistrement="APS" Batiment="A" Etage="R+1" Local="001">
    <Enregistrement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" TypeEnregistrement="APS" Batiment="Test" Etage="RdC" Local="001">
    etc ...
    soit pour l'exemple :
    >A
    >RdC
    >R+1
    >Test
    >RdC

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            public IEnumerable<string> GetBatiment()
            { 
             return doc.Descendants("Enregistrement").Where(s => s.Attribute("TypeEnregistrement").Value == "APS").Select(s => s.Attribute("Batiment").Value).Distinct();
            }
    du coup mon but est d'alimenter ma ListBatiment = new List<Batiment> avec le IEnumerable<String> mais c'est cela que j'arrive pas d'ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ListBatiment = new List<Batiment>();
    foreach (var gae in getbatiment)
              {
     
                   ListBatiment.Add(new Batiment(gae));
            }
    Je sais pas si je suis super clair dans mes explications.
    En tout cas merci de m'avoir déjà proposer une solution MABROUKI

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

Discussions similaires

  1. [AC-2003] développer une liste déroulante au survol avec la souris
    Par raphael_g dans le forum IHM
    Réponses: 18
    Dernier message: 29/04/2009, 23h22
  2. [FAQ] incrementer une liste de choix
    Par caro2552 dans le forum Contribuez
    Réponses: 0
    Dernier message: 08/12/2008, 10h58
  3. Réponses: 4
    Dernier message: 01/11/2008, 09h41
  4. Faire disparaître une liste de menu déroulant avec onmouseout
    Par Lili72430 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 10/04/2007, 19h28
  5. Réponses: 9
    Dernier message: 14/01/2007, 17h09

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