У меня есть таблица в моей базе данных, которая имеет два столбца:hierarchyid` в рекурсивных данных
HID: а `hierarchyid`
Имя: строка
В моем приложении у меня есть класс Node, который просто имеет эти два свойства. Импортировать данные в Node instantations и сохранить их все:
Dim Nodes As New List(Of Node)
Я знаю, что работает, потому что я рассмотрел данные.
У меня есть окно wpf, на котором есть только Treeview. В моем коде позади я задал контекст своего окна:
DataContext = Nodes
и теперь я хочу заполнить Treeview этими данными. Вот где я прихожу коротко. У меня есть:
<Window.Resources>
<HierarchicalDataTemplate
x:Key="MyTemplate"
ItemsSource="{Binding}">
<TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>
</Window.Resources>
<TreeView
ItemsSource ="{Binding Path=Name}"
ItemTemplate="{Binding Path=MyTemplate}">
</TreeView>
который не работает. Где я иду не так?
EDIT1: Я изменил ItemsSource в HierarchicalDataTemplate на:
ItemsSource="{Binding Path=HID}"
и установить ItemTemplate самого Treeview к:
ItemsSource ="{Binding}"
который кажется интуитивно правильным, но создает ошибки говоря HID не свойство моего класса Node. А?
Edit2: Вот некоторые примерные данные:
/ John
/1/ Jim
/2/ Mary
/1/1/ Sam
/1/1/1/ Nancy
/2/1/ Sharon
/2/1/1/ Joe
/2/1/1/1/ Henry
/2/1/1/1/ Ellen
/2/1/1/1/1/ Bart
=============================== =
Редактировать 2
Я переписал мою обработку данных из базы данных, чтобы элементы в дереве имели дочерние элементы в формате, необходимом для элемента управления Treeview. Я также изменил мою XAML на следующее:
<Window.Resources>
<HierarchicalDataTemplate
x:Key="ChildTemplate">
<TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate
x:Key="ParentTemplate"
ItemsSource="{Binding Path=ChildNodes}"
ItemTemplate="{StaticResource ChildTemplate}">
<TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>
</Window.Resources>
<TreeView
ItemsSource="{Binding}"
ItemTemplate="{StaticResource ParentTemplate}">
</TreeView>.
В моей TreeView я вижу RootNode и только первый уровень ниже этого. Есть несколько уровней ниже первого уровня, которые не представлены. Что я делаю не так?
======================
Edit 3:
У меня есть только один класс:
PersonId: Длинные
ParentID: Длинные
PersonName: String
детей: Список (личностно)
Я проследил создание всех элементов, наблюдая за ними создаются из моей последующей обработки данных из моей базы данных. Различные экземпляры классов заполняются правильно.
Используя данные, которые я первоначально отправил, например, Джон один экземпляр и у него есть два «дети», Джим и Мэри
================= ================
Редактировать 4:
Забудьте данные из моей базы данных и всего кода, который я использую для обработки данных. Я разделся все, что прочь и заменить его следующей процедурой, в которой я просто вручную определить 3 узла:
Private Sub Window1_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
Dim RootNode As New Node With {.ID = 1, .ParentID = 0, .Name = "Root"}
Dim node2 As New Node With {.ID = 2, .ParentID = 1, .Name = "son1 of Root"}
Dim node3 As New Node With {.ID = 3, .ParentID = 2, .Name = "son1 of son1"}
node2.ChildNodes.Add(node3) 'Make node3 a child of node2
RootNode.ChildNodes.Add(node2) 'Make node2 a child of the root node
Nodes.Add(RootNode) 'Add the root node to the list of nodes
DataContext = Nodes 'Make that list my data context
End Sub
Я использую определение моего класса Person в Edit 3. Здесь я просто определить корневой узел и два другие узлы. Я добавляю node3 как дочерний узел в узел 2, затем добавляю узел 2 в качестве дочернего элемента в корневой узел и, наконец, добавляю корневой узел в список узлов, который затем устанавливается как datacontext для Treeview. Вот и все.
Используя DataTemplate, показанный в Edit 2, я должен иметь это в моем дереве:
Root
son1 of Root
son1 of son1
, но я этого не делаю. Узел 2 не расширяется, чтобы показать узел 3. Другими словами, я просто вижу это:
Root
son1 of Root
Излишне говорить, что я понятия не имею, что это неправильно.
http://www.wpf-tutorial.com/treeview-control/treeview-data-binding-multiple-templates/ - если я правильно помню тип очень специфичен для связывания. – OneFineDay
Я уже работал с этими примерами. Они не являются рекурсивными, что является именно камнем преткновения, с которым я не могу пройти. – SezMe