Si vous voulez une XAML seule solution, vous pouvez utiliser le Mélange de l'Interactivité.
Assumer l' TreeView
data est lié à un ensemble hiérarchique de vue-les modèles ayant un Boolean
bien IsSelected
et String
bien Name
ainsi que d'une collection d'éléments enfant nommé Children
.
<TreeView ItemsSource="{Binding Items}">
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseRightButtonDown">
<ei:ChangePropertyAction PropertyName="IsSelected" Value="true" TargetObject="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
Il y a deux choses intéressantes:
L' TreeViewItem.IsSelected
de propriété est lié à l' IsSelected
de la propriété sur la vue-modèle. Réglage de l' IsSelected
de la propriété sur la vue-modèle true, sélectionnez le nœud correspondant dans l'arbre.
Lors de l' PreviewMouseRightButtonDown
feux sur la partie visuelle du nœud (dans cet exemple un TextBlock
) IsSelected
de la propriété sur la vue-modèle est défini sur true. Retour à 1. vous pouvez voir que le nœud correspondant qui a été cliqué dans l'arbre devient le nœud sélectionné.
Une manière d'obtenir le Mélange de l'Interactivité dans votre projet est d'utiliser le package NuGet Officieux.Mélange.L'interactivité.