У меня есть четырехуровневая древовидная структура, определяемая как:
<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)?