Bonjour à tous !
J'ai toujours un problème avec la construction des treeview!
J'ai pourtant pas mal travaillé dessus (avec l'aide du forum d'ailleurs) mais j'ai toujours un soucis de compréhension des hierarchicalDataTemplate.
Je prends un exemple tout simple (enfin presque...).
Je dispose d'une base de données sur laquelle j'ai des "Notices" sur lesquelles sont liés des "CA".
Pour des raisons un peu longues à expliquées, je ne peux pas utiliser les liaisons EF pour construire mpon treeview. Je dois donc construire une liste spécifique.
Voici comment j'ai déclaré mes noeuds (dans le viewModel):
Puis mes listes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public class TreeRecapNotice { public TreeRecapNotice() { NoeudsCA = new List<TreeRecapCA>(); } public string LibNotice { get; set; } public IEnumerable<TreeRecapCA> NoeudsCA { get; set; } } public class TreeRecapCA { public int IdCA { get; set; } public string LibCA { get; set; } }
Voici le code pour les remplir :
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 private ObservableCollection<TreeRecapNotice> _listeTreeNotice; public ObservableCollection<TreeRecapNotice> ListeTreeNotice { get { return _listeTreeNotice; } set { if (value != _listeTreeNotice) { _listeTreeNotice = value; RaisePropertyChanged("ListeTreeNotice"); } } } private ObservableCollection<TreeRecapCA> _listeTreeCA; public ObservableCollection<TreeRecapCA> ListeTreeCA { get { return _listeTreeCA; } set { if (value != _listeTreeCA) { _listeTreeCA = value; RaisePropertyChanged("ListeTreeCA"); } } }
ET enfin, mon treeview :
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 private void LoadListeRecapMouluresNew() { ListeTreeNotice = new ObservableCollection<TreeRecapNotice>(); TreeNotice = new TreeRecapNotice(); TreeNotice.LibNotice = "Notice en cours"; ListeTreeCA = new ObservableCollection<TreeRecapCA>(); TreeNotice.NoeudsCA = ListeTreeCA; ListeTreeNotice.Add(TreeNotice); foreach (CA ca in ListeCA) // pour chaque CA { TreeCA = new TreeRecapCA(); TreeCA.IdCA = ca.codeCA; TreeCA.LibCA = ca.TypeCA.nomTypeCA; ListeTreeCA.Add(TreeCA); } }
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 <navigation:Page.Resources> <sdk:HierarchicalDataTemplate x:Key="TreeCATemplate"> <TextBlock Text="{Binding Path=NoticeVM.TreeCA.LibCA, Source={StaticResource Locator}}" FontWeight="Bold" /> </sdk:HierarchicalDataTemplate> <sdk:HierarchicalDataTemplate x:Key="TreeNoticeTemplate" ItemTemplate="{StaticResource TreeCATemplate}" ItemsSource="{Binding Source={StaticResource Locator}, Path=NoticeVM.ListeTreeCA}"> <TextBlock Text="{Binding Path=NoticeVM.TreeNotice.LibNotice, Source={StaticResource Locator}}" FontWeight="Bold" /> </sdk:HierarchicalDataTemplate> </navigation:Page.Resources> <sdk:TreeView ItemTemplate="{StaticResource TreeNoticeTemplate}" ItemsSource="{Binding Path=ListeTreeNotice}" ItemContainerStyle="{Binding Source={StaticResource ExpandedTreeView}}" Width="850" Margin="0" Height="300" VerticalAlignment="Top"> </sdk:TreeView>
Pour mon exemple, j'ai utilisé une notice qui dispose d'un seul "CA". La "ListeTreeNotice" se remplie normalement avec le noeudCA. la ListeTreeCA également.
Mais mon treeview n'affiche pas le neoud enfant (juste "Notice en cours").
Merci d'avance,
Frédéric
Partager