Je rencontre des problèmes lors de la modification du DataTemplate utilisé pour TreeViewItem lorsqu'il est sélectionné. Idéalement, je voudrais que chaque élément contienne un TextBlock
, puis, lorsqu'il est sélectionné, il doit contenir un TextBox
à la place.Modification du modèle d'un TreeViewItem lorsqu'il est sélectionné
Voici ce que j'ai jusqu'à présent (je this question comme point de départ):
<Window>
<Window.Resources>
<HierarchicalDataTemplate x:Key="normal"
ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Path=Text}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="selected"
ItemsSource="{Binding Path=Children}">
<TextBox Text="{Binding Path=Text}" />
</HierarchicalDataTemplate>
<Style TargetType="{x:Type TreeViewItem}" x:Key="ContainerStyle">
<Setter Property="ItemTemplate" Value="{StaticResource normal}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="ItemTemplate" Value="{StaticResource selected}" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resource>
<Grid>
<TreeView ItemSource="{Binding Body}" ItemContainerStyle="{StaticResource ContainerStyle}" />
</Grid>
</Window>
Ce qui se passe est qu'il n'y a qu'un seul nœud de l'arbre, et le texte du nœud est le type nom de l'objet. Il semble que le type lié au nœud ne correspond pas à ce que le modèle attend, il utilise donc la liaison par défaut ToString()
au lieu de la propriété Text
comme indiqué.
J'ai défini le DataContext de la fenêtre dans le code derrière le fichier. Je sais que mes liaisons pour les données sont correctes, parce que si je définis un HierarchicalDataTemplate
pour le TreeView les données sont affichées correctement.
Je pense que mon problème est que j'ai besoin de définir une propriété autre que ItemTemplate
dans les styles TreeViewItem
- est-ce que j'utilise la bonne propriété, ou devrais-je définir quelque chose d'autre?
Typo dans le XAML: "HierarchialDataTemplate" devrait être « HierarchicalDataTemplate ". –
@MarkMiller fixe - merci! – Andy