none
TreeView avec CheckBox RRS feed

  • Question

  • Bonjour, 

    Dans mon projet XAML, je souhaite afficher un TreeView qui contient des checkBox. 

    Dans le code C#, je construis une liste d'objet que je vais binder à mon TreeView. 

    Lors de l'affichage, les noeuds principaux s'affichent correctement mais les noeuds enfants sont présent mais aucun libellé ne d'affiche. 

    voici mon code : 

    private void TreeView_Loaded(object sender, RoutedEventArgs e)
    {
       List<string> listSequence = new List<string>();
       listSequence.Add("Vente");
       listSequence.Add("Livraison");
       listSequence.Add("Commande");
       listSequence.Add("Devis");
    
       List<Model.TreeView> listTree = new List<Model.TreeView>();
                
       int i = 1;
       foreach (string sequence in listSequence)
       {
          listTree.Add(new Model.TreeView(false, methode.GetJournal(i), sequence));
    
          i++;
       }
    
      TreeView.ItemsSource = listTree;
    }

    Mon code XAML :

    <TreeView Name="TreeView" Loaded="TreeView_Loaded">
       <TreeView.ItemTemplate>
          <HierarchicalDataTemplate ItemsSource="{Binding JournalName}">
             <StackPanel>
                <CheckBox IsChecked="{Binding IsSelected}"/>
                <TextBlock Text="{Binding SequenceName}"/>
             </StackPanel>
           </HierarchicalDataTemplate>
       </TreeView.ItemTemplate>
    </TreeView>

    Ma classe TreeView :

    public class TreeView
    {
       public List<Journal> JournalName {get; set;}
       public string SequenceName { get; set; }
       public bool IsSelected { get; set; }
    
       public TreeView(Boolean c, List<Journal> l, string s)
       {
          IsSelected = c;
          JournalName = l;
          SequenceName = s;
        }
    }

    et Voici ce que j'obtiens :

    

    Comment pourrais-je faire pour que les tous les libellés s'affichent correctement ?

    Merci 

    lundi 9 mars 2015 16:48

Réponses

  • Merci , entre temps j'ai trouvé une solution. 

    Pour ceux que ça intéresse : 

    <TreeView Name="TreeView" Loaded="TreeView_Loaded">
       <TreeView.ItemTemplate>
          <HierarchicalDataTemplate DataType="{x:Type self:MenuItem}" ItemsSource="{Binding Items}">
             <CheckBox IsChecked="{Binding IsChecked}" Content="{Binding Title}"/>
          </HierarchicalDataTemplate>
       </TreeView.ItemTemplate>    
    </TreeView>

    private void TreeView_Loaded(object sender, RoutedEventArgs e)
    {
       List<string> listSequence = new List<string>();
       listSequence.Add("Vente");
       listSequence.Add("Livraison");
       listSequence.Add("Commande");
       listSequence.Add("Devis");
    
       List<string> listTree = new List<string>();
                
       int i = 1;
       foreach (string sequence in listSequence)
       {
           Model.MenuItem root = new Model.MenuItem() { Title = sequence, IsChecked = false };
    
           foreach (string journal in methode.GetJournal(i))
           {
               Model.MenuItem childItem1 = new Model.MenuItem() { Title = journal, IsChecked = false };
               root.Items.Add(childItem1);
            }
            TreeView.Items.Add(root);
            i++;
        }
     }

    class MenuItem
    {
        public MenuItem()
        {
           this.Items = new ObservableCollection<MenuItem>();
        }
    
        public string Title { get; set; }
        public Boolean IsChecked { get; set; }
    
        public ObservableCollection<MenuItem> Items { get; set; }
    }


    mardi 10 mars 2015 14:27

Toutes les réponses

  • Bonjour Delvalm,

    Pouvez-vous nous montrer où vous ajoutez les noms des noeuds enfants et les appeler?

    Merci de nous tenir au courant.

    Cordialement,

    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mardi 10 mars 2015 13:53
    Modérateur
  • Bonjour,

    Il y a un bon moment que je ne suis pas revenue sur du Treeview en XAML, mais j'avais eu le même problème.
    De souvenir, le contrôle ne sait pas ce qu'il doit afficher dans la profondeur.

    En faisant un peu de "nécro-favoris", j'ai retrouvé un tuto sur les treeviews à plusieurs niveaux. Il n'est peut être plus trop à jour. Voici le lien : WPF TreeView

    Il y aussi une "réponse similaire" sur StackOverFlow : ici

    mardi 10 mars 2015 14:19
  • Merci , entre temps j'ai trouvé une solution. 

    Pour ceux que ça intéresse : 

    <TreeView Name="TreeView" Loaded="TreeView_Loaded">
       <TreeView.ItemTemplate>
          <HierarchicalDataTemplate DataType="{x:Type self:MenuItem}" ItemsSource="{Binding Items}">
             <CheckBox IsChecked="{Binding IsChecked}" Content="{Binding Title}"/>
          </HierarchicalDataTemplate>
       </TreeView.ItemTemplate>    
    </TreeView>

    private void TreeView_Loaded(object sender, RoutedEventArgs e)
    {
       List<string> listSequence = new List<string>();
       listSequence.Add("Vente");
       listSequence.Add("Livraison");
       listSequence.Add("Commande");
       listSequence.Add("Devis");
    
       List<string> listTree = new List<string>();
                
       int i = 1;
       foreach (string sequence in listSequence)
       {
           Model.MenuItem root = new Model.MenuItem() { Title = sequence, IsChecked = false };
    
           foreach (string journal in methode.GetJournal(i))
           {
               Model.MenuItem childItem1 = new Model.MenuItem() { Title = journal, IsChecked = false };
               root.Items.Add(childItem1);
            }
            TreeView.Items.Add(root);
            i++;
        }
     }

    class MenuItem
    {
        public MenuItem()
        {
           this.Items = new ObservableCollection<MenuItem>();
        }
    
        public string Title { get; set; }
        public Boolean IsChecked { get; set; }
    
        public ObservableCollection<MenuItem> Items { get; set; }
    }


    mardi 10 mars 2015 14:27