我需要用我拥有的字典列表填写 TreeView。
List<Dictionary<string,object>>
字典有标题和子键的地方
[{"title":"foo", "children":[]},]
但是我无法弄清楚绑定。这是完全错误的。我显然需要显示 dict["title"] 并使用 dict["children"] 作为孩子。
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Value}">
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
<TextBlock Text="{Binding Key}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
哈哈,显然 Binding 支持 [] 语法,所以这种工作:
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=[children]}">
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=[title]}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
<TextBlock Text="{Binding Path=[title]}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
但是,每个字典都可以将子级嵌套到他们想要的任意多个级别。这可以处理吗?使用上面的模板和下面的代码,孙子不显示。
string s = @"[{""title"":""Title1"",""children"":[{""title"":""Child1"",""children"":[{""title"":""grandchild1"",""children"":[]}]}]}]";
List<Dictionary<string, object>> marr = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(s);
mTreeView.ItemsSource = marr;
顺便说一下,在 Binding 中使用 [] 称为索引器,我从这个链接的文档中找到了它:
http://msdn.microsoft.com/en-us/library/ms752300.aspx#Path_Syntax