Я храню древовидные данные в Dictionary
, объявленном как:
Dictionary<string, object>
string
является меткой, а object
может быть одним из следующих:
- A
string
- An
int
- A вложенный
Dictionary<string, object>
Я пытаюсь заставить это отображаться в TreeView
с этим XAML:
<TreeView Background="Black" Foreground="Yellow" ItemsSource="{Binding}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Value}">
<TextBlock Foreground="Red" Text="{Binding Path=Key}" />
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Foreground="LightGreen" Text="{Binding Path=Key}"/>
<TextBlock Foreground="White" Text="="/>
<TextBlock Foreground="Yellow" Text="{Binding Path=Value}"/>
</StackPanel>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
Это работает для верхнего уровня, но добавление еще одного уровня выглядит следующим образом:
С этими данными:
Variable1...
child1 = "hello"
child2 = "there"
child3...
sub1 = "how"
sub2 = "are"
sub3 = "you"
Variable2...
child1 = "lorem"
child2 = "ipsum"
Итак, он работает, когда дочерний объект является string
или int
, но когда это Dictionary
, он просто преобразует его в строку и не обрабатывает его рекурсивно.
Как я могу получить эти данные для отображения?
Edit:
Код для построения дерева:
Dictionary<string, object> data = new Dictionary<string, object>();
Dictionary<string, object> child = new Dictionary<string, object>();
child["child1"] = "hello";
child["child2"] = "there";
Dictionary<string, object> child2 = new Dictionary<string, object>();
child2["sub1"] = "how";
child2["sub2"] = "are";
child2["sub3"] = "you";
child["child3"] = child2;
data["Variable1"] = child;
child = new Dictionary<string, object>();
child["child1"] = "lorem";
child["child2"] = "ipsum";
data["Variable2"] = child;
variablesWindow.DataContext = data;