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 :

TreeView comme Menu avec Binding [MVVM]


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 16
    Par défaut TreeView comme Menu avec Binding
    Bonjour à tous,

    Tout d'abord désolé si le sujet a été traité mais je n'ai pas réussie a trouvé exactement la réponse à mon problème ici et sur internet.

    Je suis nouveau en WPF et pour un projet je dois utiliser un TreeView comme Menu. Afin de faire proprement les choses j'essaie au Maximum de faire du MVVM et d'utiliser le binding.
    Le problème est que mon Menu est fixe mes certains éléments sont rajouter à la volé par l'utilisateur.

    J'ai N Project, contenant chacun N Table contenue dans deux Collections distincte. Une pour les DataTables et une autre pour les ProcessTables. Le tout est stocké dans une Collection de projet. Pour les collections j'ai utilisé des ObservableCollection qui sont utile pour le MVVM ( si j'ai bien tout comprit ...)
    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
     
            public Project()
            {
                DataTables = new ObservableCollection<Table>();
                ProcessTables = new ObservableCollection<Table>();
            }
     
            public string Name { get; set; }
     
            public ObservableCollection<Table> DataTables { get; set; }
            public ObservableCollection<Table> ProcessTables { get; set; }
        }
     
        public class Projects : ObservableCollection<Project>
        {
            public Project this[string name]
            {
                get
                {
                    foreach (Project project in this)
                        if (project.Name == name)
                            return project;
     
                    return null;
                }
            }
        }
     
        public class Table
        {
            public string Name { get; set; }
        }
    Ce que je souhaites faire est de créer un TreeView que j'exploiterais comme Menu sous la forme suivante :

    + Projects :
    +NomDuProjet
    +Data tables :
    NomDeLaDataTable
    +Process tables :
    NomDeLaProcessTable

    Si dessous le visuel que je souhaite avoir :

    Nom : ScreenShot003.jpg
Affichages : 92
Taille : 43,6 Ko
    (J'ai ajouté (fixe) et (auto) pour signifier ce qui était du Menu, et ce qui était généré par l'utilisateur)

    Après de multiple recherche j'arrive à faire quelque choses mais encore loin de ce que je veux :
    Nom : ScreenShot004.jpg
Affichages : 81
Taille : 13,7 Ko
    Et le code XAML associé :

    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
     
    <Window x:Class="TestTreeView.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:src="clr-namespace:TestTreeView"
            Title="MainWindow" Height="500" Width="525">
     
        <Window.Resources>
            <HierarchicalDataTemplate DataType = "{x:Type src:Project}"
                                    ItemsSource = "{Binding Path=DataTables}">
                <TextBlock Text="{Binding Path=Name}"/>
            </HierarchicalDataTemplate>
     
            <DataTemplate DataType="{x:Type src:Table}">
                <TextBlock Text="{Binding Path=Name}"/>
            </DataTemplate>
     
        </Window.Resources>
        <Grid>
            <TreeView Name="treeView" >
                <TreeViewItem ItemsSource="{Binding}" Header="Projects"/>
            </TreeView>
        </Grid>
    </Window>

    Voilà, si vous avez des pistes pour mon treeview à moitité généré automatiquement

    J'ai fait un petit projet de test dispo en pièce jointe.
    TestTreeView.zip

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 16
    Par défaut
    Après une aide externe,que je remercie, mon problème est résolue.
    Je poste la solution si dessous :

    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
     <Window.Resources>
            <HierarchicalDataTemplate DataType = "{x:Type src:Project}"
                                    ItemsSource = "{Binding Path=Tables}">
                <TextBlock Text="{Binding Path=Name}"/>
                <HierarchicalDataTemplate.ItemTemplate>
                    <HierarchicalDataTemplate DataType="{x:Type src:Tables}" ItemsSource="{Binding}">
                        <TextBlock Text="{Binding Path=Name}"/>
                    </HierarchicalDataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>
            </HierarchicalDataTemplate>
     
            <DataTemplate DataType="{x:Type src:Table}">
                <TextBlock Text="{Binding Path=Name}"/>
            </DataTemplate>
     
        </Window.Resources>
    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
     public class Project
        {
            public Project()
            {
                DataTables = new Tables("DataTables");
                ProcessTables = new Tables("ProcessTables");
            }
     
            public string Name { get; set; }
     
            public Tables DataTables { get; set; }
            public Tables ProcessTables { get; set; }
     
            public IEnumerable<Tables> Tables
            {
                get
                {
                    return new List<Tables> { DataTables, ProcessTables };
                }
            }
        }
     
        public class Projects : ObservableCollection<Project>
        {
            public Project this[string name]
            {
                get
                {
                    foreach (Project project in this)
                        if (project.Name == name)
                            return project;
     
                    return null;
                }
            }
        }
     
     
        public class Table
        {
            public string Name { get; set; }
        }
     
        public class Tables : ObservableCollection<Table>
        {
            public string Name { get; private set; }
     
            public Tables(string name)
            {
                Name = name;
            }
        }

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

Discussions similaires

  1. Menu avec composant Treeview
    Par espoir13 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 06/11/2009, 22h37
  2. TreeView et menu contextuel...
    Par agh dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/04/2009, 12h23
  3. [html+css] problème menu avec liens display:block
    Par Cypselos dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 28/08/2005, 09h39
  4. Problème avec bind
    Par jaabouc dans le forum Réseau
    Réponses: 5
    Dernier message: 12/06/2005, 14h32
  5. [FLASH MX2004] Problème de menu avec explorer
    Par lyne dans le forum Flash
    Réponses: 2
    Dernier message: 24/08/2004, 19h34

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