2009-09-26 7 views
1

Je suis en train d'ajouter des cases à cocher aux nœuds feuilles dans un TreeView WPF. Je sais comment faire si nous avons un nombre fixe de niveaux dans la hiérarchie et en utilisant un HierarchicalDataTemplate pour chaque niveau. Mais que faire quand je veux ceci:
-Node 1
- Noeud 1a (nœud feuille avec case à cocher)
- Noeud 1b
--- Noeud 1BI (nœud feuille avec case à cocher)
-Node 2
- Noeud 2a (noeud feuille avec case à cocher)modèle propre pour les noeuds de feuilles dans un WPF TreeView avec des niveaux inconnus

Je définis le DataContext dans le fichier de code sur un DataTable. Juste une table, avec une relation à soi-même.

DataContext = ds.MyDataTable; 

XAML:

<UserControl x:Class="JostyWpfControls.UserControl1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Height="240" Width="312"> 
    <UserControl.Resources> 
     <HierarchicalDataTemplate x:Key="myTemplate" 
      ItemsSource="{Binding myDatasetRelation}"> 
      <CheckBox IsChecked="{Binding IsChosen}"> 
       <TextBlock Text="{Binding Description}"/> 
      </CheckBox> 
     </HierarchicalDataTemplate> 
    </UserControl.Resources> 
    <Grid> 
     <TreeView x:Name="treeView" 
      ItemsSource="{Binding}" 
      ItemTemplate="{StaticResource myTemplate}"> 
     </TreeView> 
    </Grid> 
</UserControl> 

Cela fonctionne, mais me donne un chechbox à tous les nœuds. Je veux juste que les nœuds feuilles aient une case à cocher.

+0

Pourriez-vous fournir une partie du XAML que vous avez déjà, comme point de départ pour fournir une réponse? pour vous? Je –

+0

modifié ma question une d ajouté mon XAML. – jostyposty

Répondre

4

Vous pouvez utiliser un déclencheur dans le modèle de données pour déterminer si la case à cocher doit être visible:

<HierarchicalDataTemplate x:Key="myTemplate" 
          ItemsSource="{Binding myDatasetRelation}"> 
    <StackPanel> 
    <CheckBox x:Name="CheckBox" IsChecked="{Binding IsChosen}" 
       Content="{Binding Description}" /> 
    <TextBlock x:Name="LeafLabel" Text="{Binding Description}" 
       Visibility="Collapsed" /> 
    </StackPanel> 
    <HierarchicalDataTemplate.Triggers> 
    <DataTrigger Binding="{Binding myDatasetRelation.Count}" Value="0"> 
     <Setter TargetName="CheckBox" Property="Visibility" Value="Collapsed" /> 
     <Setter TargetName="LeafLabel" Property="Visibility" Value="Visible" /> 
    </DataTrigger> 
    </HierarchicalDataTemplate.Triggers> 
</HierarchicalDataTemplate> 

Je ne suis pas sûr que la valeur liée à via myDatasetRelation a une propriété Count, mais sinon, vous pouvez utiliser Length ou trouver une autre façon de déterminer si elle est vide ou non (peut-être en utilisant un IValueConverter si aucune approche plus simple n'est disponible)

+0

votre code collé juste et cela fonctionne grossir! Merci! – jostyposty

+0

De rien. Je suis content que cela a fonctionné comme je l'ai tapé de la mémoire qui souvent ne fonctionne pas la première fois. –

Questions connexes