2009-08-19 6 views
3

J'ai un TreeView avec un HierarchicalDataTemplate (illustré ci-dessous) lié à une relation de données dans un ensemble de données. Les nœuds parents représentent les parties parents et les enfants représentent les parties qui composent le parent. Dans certains cas, l'utilisateur va cocher la case au niveau parent pour indiquer qu'il remplace la partie entière avec tous ses enfants. À ce stade, une zone de texte apparaîtra pour qu'ils entrent le nouveau numéro de pièce pour le parent. Jusqu'à présent, j'ai ce travail.Utilisation de HierarchicalDataTemplate.Triggers pour affecter les contrôles du ItemTemplate

Ce dont j'ai besoin d'aide, c'est de cacher les enfants lorsque la case parent est cochée. J'ai approché ceci du chemin de déclenchement, mais je ne peux pas sembler faire une référence à aucun des contrôles dans le ItemTemplate d'un déclencheur dans le HierarchicalDataTemplate.Triggers. Peut-être que ce n'est pas possible?

<HierarchicalDataTemplate ItemsSource="{Binding MyParts}"> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="{Binding Description}" /> 
     <CheckBox x:Name="MyCheckBox" IsChecked="{Binding ReplaceParent}"></CheckBox> 
     <TextBox x:Name="NewParentPartNumberTextBox" Text="{Binding NewPartNumber}" Visibility="Collapsed"></TextBox> 
    </StackPanel> 
    <HierarchicalDataTemplate.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding ChildPartNumber}" /> 
       <TextBox Text="{Binding NewChildPartNumber}" /> 
      </StackPanel> 
     </DataTemplate> 
    </HierarchicalDataTemplate.ItemTemplate> 
    <HierarchicalDataTemplate.Triggers> 
     <Trigger SourceName="MyCheckBox" Property="IsChecked" Value="True"> 
      <Setter TargetName="NewParentPartNumberTextBox" Property="Visibility" Value="Visible"/> 
     </Trigger> 
    </HierarchicalDataTemplate.Triggers> 
</HierarchicalDataTemplate> 

Répondre

0

Ce n'est pas une XAML seule approche, mais il pourrait répondre à vos besoins:

que votre ViewModel/classe qui est-à-lié-votre-parent-objet se présente comme suit :

public class ItemViewModel 
{ 
    public bool ReplaceParent {get; set;} 
    public ObservableCollection<ItemViewModel> MyParts {get; set;} 
} 

Vous pourrait essayer quelque chose comme:

public class ItemViewModel 
{ 
    private bool _replaceParent; 
    private ObservableCollection<ItemViewModel> _originalParts = ....; 
    public bool ReplaceParent 
    { 
     get { return _replaceParent; } 
     set 
     { 
      MyParts = value ? 
         new ObservableCollection<ItemViewModel>() : 
         _originalParts; 
      // omit: any property changed logic  
     } 
    } 
    public ObservableCollection<ItemViewModel> MyParts {get; set;} 
} 

Fondamentalement, sw Sortez la collection enfants avec une liste vide pendant que vous avez coché la case.

Questions connexes