我需要用我有的词典列表填写一个TreeView。C#WPF - 与词典的TreeView绑定
凡字典有标题和孩子键
[{"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>
哈所以显然绑定支持[]语法,因此这类作品:
<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;
通过在绑定使用[]的方式被称为索引,我从文档发现了它在此链接:
http://msdn.microsoft.com/en-us/library/ms752300.aspx#Path_Syntax
你需要一个转换器,它可以通过一个特定的键从字典中获取/设置值。有了这样一个转换器,你可以按照以下方式进行绑定:'{Binding Converter = {StaticResource GetFromDictionaryConverter},ConverterParameter = children}'或'{Binding Converter = {StaticResource GetFromDictionaryConverter},ConverterParameter = title}',假设转换器已被添加为具有关键字'GetFromDictionaryConverter'的资源并且它使用转换器参数作为关键字并且假定绑定源是'Dictionary'。 –