Problème sur construction treeview
Bonjour à tous !
J'ai toujours un problème avec la construction des treeview :oops: !
J'ai pourtant pas mal travaillé dessus (avec l'aide du forum d'ailleurs :ccool:) 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):
Code:
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; }
} |
Puis mes listes
Code:
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");
}
}
} |
Voici le code pour les remplir :
Code:
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);
}
} |
ET enfin, mon treeview :
Code:
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