This is a migrated thread and some comments may be shown as answers.

Treeview not expanding

1 Answer 63 Views
TreeView
This is a migrated thread and some comments may be shown as answers.
Ludovic Gerbault
Top achievements
Rank 1
Ludovic Gerbault asked on 10 Oct 2009, 09:40 AM
Hello

I'm trying to build a menu using the treeview control by building a List collection just like the DataBinding example of the demo

Right now, I have these three pieces of code :

using System; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Ink; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 
using System.Collections.Generic; 
 
namespace T2J_Application.Classes 
    public class MenuStruct 
    { 
        public MenuStruct(MenuItem menu) 
        { 
            _menu = menu; 
            _sous_menu = new List<SousMenu>(); 
        } 
 
        MenuItem _menu; 
        public MenuItem _Menu { get { return _menu; } } 
 
        List<SousMenu> _sous_menu; 
        public List<SousMenu> _Sous_menu { get { return _sous_menu; } } 
    } 
 
    public class SousMenu 
    { 
        public SousMenu(MenuItem sousMenu) 
        { 
            _menu = sousMenu; 
            _teams = new List<SousSousMenu>(); 
 
        } 
 
        MenuItem _menu; 
        public MenuItem _Menu { get { return _menu; } } 
 
        List<SousSousMenu> _teams; 
        public List<SousSousMenu> Teams { get { return _teams; } } 
 
    } 
 
    public class SousSousMenu 
    { 
        public SousSousMenu(MenuItem soussousmenu) 
        { 
            _menu = soussousmenu; 
        } 
 
        MenuItem _menu; 
 
        public MenuItem _Menu { get { return _menu; } } 
    } 
 

using System; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Ink; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 
using System.Xml.Linq; 
using T2J_Application.ApplicationService; 
namespace T2J_Application.Classes 
 public class MenuItem 
 { 
  public MenuItem(MenuItemBO menuItem) 
  { 
      Id_objet = menuItem.Id_objet; 
      Code_objet = menuItem.Code_objet; 
      Lib_objet = menuItem.Lib_objet; 
      Action = menuItem.Action; 
      Menu = menuItem.Menu; 
      Position = menuItem.Position; 
      Afficher = menuItem.Afficher; 
      Modifier = menuItem.Modifier; 
      Lib_categorie_partenaire = menuItem.Lib_categorie_partenaire; 
      Id_objet_categorie = menuItem.Id_objet_categorie; 
      Id_categorie_partenaire  = menuItem.Id_categorie_partenaire; 
      Id_objet_pere = menuItem.Id_objet_pere; 
      Id_objet_type = menuItem.Id_objet_type; 
      Id_objet_avant = menuItem.Id_objet_avant; 
      Est_defaut = menuItem.Est_defaut; 
      Id_societe = menuItem.Id_societe; 
  } 
 
  public int Id_objet { getset; } 
  public String Code_objet { getset; } 
  public String Lib_objet { getset; } 
  public String Action { getset; } 
  public Boolean Menu { getset; } 
  public int Position { getset; } 
  public Boolean Afficher { getset; } 
  public Boolean Modifier { getset; } 
  public String Lib_categorie_partenaire { getset; } 
  public int Id_objet_categorie { getset; } 
  public int Id_categorie_partenaire { getset; } 
  public int Id_objet_pere { getset; } 
  public int Id_objet_type { getset; } 
  public int Id_objet_avant { getset; } 
  public Boolean Est_defaut { getset; } 
  public int Id_societe { getset; } 
 } 
 

 IList<MenuStruct> menuStruct = new List<MenuStruct>(); 
            IList<MenuItemBO> result = e.Result; 
            IList<MenuItemBO> ItemParent = new List<MenuItemBO>(); 
            IList<MenuItemBO> ItemEnfants = new List<MenuItemBO>(); 
            IList<MenuItemBO> ItemSousMenuParents = new List<MenuItemBO>(); 
            foreach (MenuItemBO item in result) 
            { 
                if (item.Id_objet_type == 4) 
                { 
                    if (item.Id_objet_pere == 0) 
                    { 
                        ItemParent.Add(item); 
                    } 
                    else  
                    { 
                        ItemSousMenuParents.Add(item); 
                    } 
                } 
                else  
                { 
                    ItemEnfants.Add(item);                     
                } 
            } 
            foreach (MenuItemBO itemMenu in ItemParent) 
            { 
                MenuStruct menus; 
                menuStruct.Add(menus = new MenuStruct(new MenuItem(itemMenu))); 
                foreach (MenuItemBO enfants in ItemEnfants) 
                { 
                    SousMenu ssmenu; 
                    if (menus._Menu.Id_objet == enfants.Id_objet_pere) 
                    { 
                        menus._Sous_menu.Add(ssmenu = new SousMenu(new MenuItem(enfants))); 
                    } 
                } 
            } 
            MenuTreeView.ItemsSource = menuStruct; 
            MenuTreeView.DisplayMemberPath = "_Menu.Lib_objet"
            MenuTreeView.Margin = new Thickness(0, 30, 0, 0); 
            Zone_menu.Children.Add(MenuTreeView); 

When I execute this code, I can see the first level of the menu displaying fine, with the proper text.
I know by debbuging that the menuStruct variable holds the second level when I set the itemsource, but somehow, when I try to display it by clicking on the parent node, it won't expand.

FYI : MenuTreeView is declared earlier in the code, and Zone_Menu is a stackpanel in the xaml file.

Any idea why ?


1 Answer, 1 is accepted

Sort by
0
Ludovic Gerbault
Top achievements
Rank 1
answered on 10 Oct 2009, 10:56 AM
never mind, there was just a problem in the HierarchicalDataTemplate, it's fixed now
Tags
TreeView
Asked by
Ludovic Gerbault
Top achievements
Rank 1
Answers by
Ludovic Gerbault
Top achievements
Rank 1
Share this question
or