Я думаю, вам нужно будет создать HierarchicalDataTemplate
s для "статических" узлов. И так как ItemsSource для HierarchicalDataTemplate
ожидает коллекцию, вы можете создать эти коллекции в Xaml следующим образом
* Namespaces 1006 *
xmlns:coll="clr-namespace:System.Collections;assembly=mscorlib"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Коллекция
<coll:ArrayList x:Key="MapCollection">
<sys:String>Maps</sys:String>
</coll:ArrayList>
<coll:ArrayList x:Key="TableCollection">
<sys:String>Tables</sys:String>
</coll:ArrayList>
<coll:ArrayList x:Key="FieldCollection">
<sys:String>Fields</sys:String>
</coll:ArrayList>
Проблема с этим решением заключается в том, что при установке, например, MapCollection как ItemsSource для HierarchicalDataTemplate
, у вас не будет доступа к Maps
свойству Collection на следующем уровне, поэтому вам придется взобраться на Visual Tree, чтобы получить его, как
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}},
Path=DataContext.Maps}"
Используя этот подход, ваши HierarchicalDataTemplate
могут выглядеть следующим образом
<!-- Field Templates -->
<HierarchicalDataTemplate x:Key="FieldsTemplate">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="FieldTemplate"
ItemTemplate="{StaticResource FieldsTemplate}"
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}},
Path=DataContext.Fields}">
<TextBlock Text="{Binding}"/>
</HierarchicalDataTemplate>
<!-- Table Templates -->
<HierarchicalDataTemplate x:Key="TablesTemplate"
ItemTemplate="{StaticResource FieldTemplate}"
ItemsSource="{Binding Source={StaticResource FieldCollection}}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="TableTemplate"
ItemTemplate="{StaticResource TablesTemplate}"
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}},
Path=DataContext.Tables}">
<TextBlock Text="{Binding}"/>
</HierarchicalDataTemplate>
<!-- Map Templates -->
<HierarchicalDataTemplate x:Key="MapsTemplate"
ItemTemplate="{StaticResource TableTemplate}"
ItemsSource="{Binding Source={StaticResource TableCollection}}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="MapTemplate"
ItemTemplate="{StaticResource MapsTemplate}"
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}},
Path=DataContext.Maps}">
<TextBlock Text="{Binding}"/>
</HierarchicalDataTemplate>
<!-- Project Template -->
<HierarchicalDataTemplate x:Key="ProjectDataTemplate"
ItemTemplate="{StaticResource MapTemplate}"
ItemsSource="{Binding Source={StaticResource MapCollection}}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
TreeView
<TreeView Name="treeView"
ItemTemplate="{StaticResource ProjectDataTemplate}"
ItemsSource="{Binding Projects}"/>