Могу ли я автоматически обернуть элементы HierarchicalDataTemplate внутри TreeViewItem? - PullRequest
0 голосов
/ 27 февраля 2009

У меня есть четырехуровневая древовидная структура, определяемая как:

<HierarchicalDataTemplate DataType="{x:Type src:Level1}" ItemsSource="{Binding Path=Level2Items}">
    <TextBlock Text="{Binding Path=Level1Name}"/>
</HierarchicalDataTemplate>

<HierarchicalDataTemplate DataType="{x:Type src:Level2}" ItemsSource="{Binding Path=Level3Items}">
    <TextBlock Text="{Binding Path=Level2Name}"/>
</HierarchicalDataTemplate>

<HierarchicalDataTemplate DataType="{x:Type src:Level3}" ItemsSource="{Binding Path=Level4Items}">
    <TextBlock Text="{Binding Path=Level3Name}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type src:Level4}">
    <TextBlock Text="{Binding Path=Level4Name}"/>
</DataTemplate>

И это прекрасно работает. Единственное, я не могу программно выбрать ни один из моих связанных элементов, потому что они не относятся к типу TreeViewItem (и, следовательно, не имеют свойства IsSelected). Есть ли способ автоматически переносить элементы данных в определенный тип контейнера (в данном случае: TreeViewItem)?

1 Ответ

3 голосов
/ 27 февраля 2009

Если ваши предметы в TreeView, они будут автоматически обернуты в TreeViewItem TreeView ItemContainerGenerator. Вы можете сделать что-то подобное, чтобы свойство IsSelected в TreeViewItem отображало свойство в вашем классе данных:

<TreeView>
    <TreeView.ItemContainerStyle>
        <Style TargetType="TreeViewItem">
            <Setter Property="IsSelected" Value="{Binding MyIsSelectedProperty}"/>
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...