У меня возникли некоторые проблемы при изменении DataTemplate, который используется для TreeViewItem, когда он выбран. В идеале я хотел бы, чтобы каждый элемент содержал TextBlock
, а затем при выборе он должен содержать TextBox
.
Вот что у меня есть (я использовал этот вопрос в качестве отправной точки):
<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>
Что происходит, так это то, что в дереве есть только один узел, а текст узла является именем типа объекта. Звучит так, как будто привязанный к узлу тип не соответствует шаблону, поэтому он использует привязку ToString()
по умолчанию вместо свойства Text
, как я указал.
Я установил DataContext окна в коде файла. Я знаю, что мои привязки для данных верны, потому что если я установил один HierarchicalDataTemplate
для TreeView, данные будут отображаться правильно.
Я думаю, что моя проблема в том, что мне нужно установить свойство, отличное от ItemTemplate
в стилях TreeViewItem
- я использую правильное свойство или мне нужно установить что-то еще?