1

J'ai un problème lors de la création d'un TreeView ComponentOne dans Silverlight (C1TreeView) avec un C1HierarchicalDataTemplate. Dans le détail de l'arbre montre seulement 2 niveaux (H1 et H2), bien que 3 niveaux sont définis par HierarchicalDataTemplates comme:C1HierarchicalDataTemplate/C1TreeView Problème

<c1:C1HierarchicalDataTemplate x:Key="H3Template"> 
      <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" /> 
    </c1:C1HierarchicalDataTemplate> 

    <c1:C1HierarchicalDataTemplate x:Key="H2Template" ItemsSource="{Binding Path=H3Items}" ItemTemplate="{StaticResource H3Template}"> 
     <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" /> 
    </c1:C1HierarchicalDataTemplate> 

    <c1:C1HierarchicalDataTemplate x:Key="H1Template" ItemsSource="{Binding Path=H2Items}" ItemTemplate="{StaticResource H2Template}"> 
     <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" /> 
    </c1:C1HierarchicalDataTemplate>"); 

J'utilise ce modèles dans un TreeView personnalisé (dérivés de C1TreeView):

<c1:C1TreeView ... ItemTemplate="{StaticResource H1Template}"> 
</c1:C1TreeView> 

le constructeur de cette TreeView ressemble à ceci:

public MyTreeView(ObservableCollection<H1> h1Items) 
{ 
    InitializeComponent(); 
    ItemsSource = h1Items; 
} 

Quelqu'un peut-il voir l'erreur dans ces extraits de code ??

thx, Dom

Répondre

1

Bien que je ne suis pas familier avec le TreeView ComponentOne que vous utilisez, et malgré le fait que vous utilisez Silverlight, WPF normalement lorsque vous utilisez HierarchicalDataTemplates, vous dire le modèle que tapez c'est pour. Les modèles de sous-éléments sont également informés du type auquel ils s'appliquent. Vous ne pas spécifiquement indiquer le modèle de données quel modèle à utiliser pour son ItemTemplate. Cela est automatiquement déterminé par le système en fonction du type d'objet. Ce également s'applique lorsque vous liez une collection d'éléments à TreeView - vous ne devez pas spécifier le ItemTemplate.

Donc, dans votre cas (local: est un espace de nom défini en haut de votre XAML):

<c1:C1HierarchicalDataTemplate DataType="{x:Type local:H1}" 
           ItemsSource="{Binding Path=H2Items}"> 
    <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" /> 
</c1:C1HierarchicalDataTemplate> 

<c1:C1HierarchicalDataTemplate DataType="{x:Type local:H2}" 
           ItemsSource="{Binding Path=H3Items}"> 
    <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" /> 
</c1:C1HierarchicalDataTemplate> 

<c1:C1HierarchicalDataTemplate DataType="{x:Type local:H3}"> 
    <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" /> 
</c1:C1HierarchicalDataTemplate> 

Et le TreeView:

<c1:C1TreeView ItemsSource="{Binding SomeH1List}"/> 

Bien sûr, comme je l'ai dit, cela concerne WPF, donc cela pourrait ne pas s'appliquer dans votre cas.