У меня есть дерево WPF, которому нужно показать некоторые узлы. Допустим, у меня есть 2 типа сущностей, EntityA и EntityB. Оба этих объекта реализуют общий интерфейс IEntity. Теперь EntityA будет иметь набор элементов EntityB, а также элементы EntityA. Как я могу показать это через HierarchicalDataTemplate?Вопрос о шаблоне данных иерархии в дереве WPF
Я показываю ObservableCollection(), называемый «DisplayItems» в моей виртуальной машине, который будет содержать элементы типа EntityA.
И у EnittyA, и у EntityB будет еще один ObservableCollection, называемый «ItemCollection». Для EntityA список ItemCollection должен идеально содержать объекты EntityA и EntityB.
Ток HierarchicalDataTemplate и XAML, который я использую выглядит следующим образом:
<HierarchicalDataTemplate ItemsSource="{Binding Path=ItemCollection}" DataType="{x:Type Entities:EntityB}">
<Grid>
<StackPanel Orientation="Horizontal" x:Name="compositeCT">
<Image Source="/Images/EntityB.png" Width="15" Height="15"/>
<Label Foreground="Blue" Content="{Binding Path=Name}"/>
<Label Foreground="Black" Content=" = "/>
<Label Foreground="Blue" Content="{Binding Path=CompositeLabel}"/>
</StackPanel>
<StackPanel Orientation="Horizontal" x:Name="nCompositeCT">
<Image Source="/Images/EntityB.png" Width="15" Height="15"/>
<TextBlock Foreground="Blue" Text="{Binding Path=Name}"/>
</StackPanel>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Foreground="Green" Text="{Binding}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=ItemCollection}" DataType="{x:Type Entities:EntityA}">
<StackPanel Orientation="Horizontal" >
<Image Source="/Images/ElementA.png" Margin="3" Width="15" Height="15" Focusable="False"/>
<TextBlock Foreground="Red" Text="{Binding Path = Name}" Focusable="False"/>
</StackPanel>
</HierarchicalDataTemplate>
<TreeView x:Name="tvMyTree"
ItemsSource="{Binding DisplayItems}"
AllowDrop="True"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
ScrollViewer.IsDeferredScrollingEnabled="True"
Margin="5"
TreeViewItem.Expanded="OnTreeViewItemExpanded"
TreeViewItem.Selected="OnTreeViewItemSelected"
/>
Похоже, ваш XAML код не получили вставил правильно –