2015-05-05 3 views
1

Я пытаюсь использовать WPF TreeView для создания иерархии в моем приложении, я пытаюсь создать иерархию следующим образом:Использование WPF TreeView для создания иерархии

Obj A 
-Obj B 
--Obj C 
---Obj D 
----Obj E 
---Obj D 
----Obj E 

В сущности каждый из объектов в иерархия выше с разными буквами - это разные типы объектов, которые все наследуют от абстрактного класса для совместного использования общих свойств.

Одним из этих общих свойств является Список, содержащий дочерние элементы этого конкретного узла.

После просмотра некоторых онлайн-руководств и форумов у меня возникли трудности с созданием иерархии с использованием атрибутов HierarchicalDataTemplate XAML.

В настоящее время я использую следующий код XAML:

<TreeView x:Name="treeviewProjectStructure" Grid.Row="1" Margin="2" SelectedItemChanged="treeviewProjectStructure_SelectedItemChanged" ItemsSource="{Binding Nodes}"> 
     <TreeView.Resources> 
      <HierarchicalDataTemplate DataType="{x:Type local:Node}" ItemsSource="{Binding Children.Name}"> 
       <TextBlock Text="{Binding Name}"></TextBlock> 
      </HierarchicalDataTemplate> 
     </TreeView.Resources> 
</TreeView> 

В приведенном выше примере «узлов» является ObservableCollection, который содержит все узлы, которые объявлены в MainWindow.cs

Используя этот XAML просто отображает корневой узел без каких-либо дочерних узлов.

Любая помощь будет высоко ценится, спасибо :)

ответ

0

ItemsSource в вашем HierarchicalDataTemplate неправильно, вы должны связываться с Children, не Children.Name:

... ItemsSource="{Binding Children}" 

Кроме того, вы должны установить HierarchicalDataTemplate, как TreeViewItemTemplate, а не за счет ресурсов:

<TreeView x:Name="treeviewProjectStructure" Grid.Row="1" Margin="2" SelectedItemChanged="treeviewProjectStructure_SelectedItemChanged" ItemsSource="{Binding Nodes}"> 
     <TreeView.ItemTemplate> 
      <HierarchicalDataTemplate DataType="{x:Type local:Node}" ItemsSource="{Binding Children}"> 
       <TextBlock Text="{Binding Name}"></TextBlock> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 
</TreeView> 
+0

Спасибо за ваш ответ, когда я реализую то, что вы предложили, TreeView отображает только родительский узел без детей. Чтобы дать дополнительную информацию, каждый узел имеет список, содержащий детали дочернего узла. – andrewjameswatt

+0

@andrewjameswatt, у вас есть свойство Children в вашем классе Node, не так ли? –

+0

Да, класс Node содержит объект Dictionary, который содержит дочерние элементы. – andrewjameswatt