C#WPF-带字典的TreeView绑定
我需要在树视图中填写我拥有的词典列表C#WPF-带字典的TreeView绑定,c#,wpf,binding,treeview,C#,Wpf,Binding,Treeview,我需要在树视图中填写我拥有的词典列表 List<Dictionary<string,object>> 然而,我无法理解绑定。这是完全错误的。我显然需要显示dict[“title”]并使用dict[“children”]作为子对象 <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding Value}"> <HierarchicalD
List<Dictionary<string,object>>
然而,我无法理解绑定。这是完全错误的。我显然需要显示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;
string s=@“[{”“title”“:”“Title1”“children”“:[{”“title”“:”“Child1”“children”“:[{”“title”“:”“孙子1”“children”“:[]}]}]”;
List marr=JsonConvert.DeserializeObject;
mTreeView.ItemsSource=marr;
顺便说一句,在绑定中使用[]称为索引器,我从以下链接的文档中了解到:
这是您正在查看的内容:
<TreeView ItemsSource="{Binding ElementName=rootWindow, Path=Directories}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding [Children]}">
<TextBlock Text="{Binding [Title]}" />
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
这是我填充数据的方式:
Dictionary<string, object> documentsDictionary = new Dictionary<string, object>();
List<string> documentsDictionaryChildren = new List<string> { "Document1", "Document2", "Document3", "Document4", "Document5" };
documentsDictionary.Add("Title", "Documents");
documentsDictionary.Add("Children", documentsDictionaryChildren);
Dictionary<string, object> picturesDictionary = new Dictionary<string, object>();
List<string> picturesDictionaryChildren = new List<string> { "Picture1", "Picture2", "Picture3", "Picture4", "Picture5" };
picturesDictionary.Add("Title", "Pictures");
picturesDictionary.Add("Children", picturesDictionaryChildren);
Directories.Add(documentsDictionary);
Directories.Add(picturesDictionary);
字典文档Dictionary=newdictionary();
列表文档DictionaryChildren=新列表{“Document1”、“Document2”、“Document3”、“Document4”、“Document5”};
文件目录。添加(“标题”、“文件”);
documentsDictionary.Add(“儿童”,documentsDictionary儿童);
字典图片字典=新字典();
List picturesDictionaryChildren=新列表{“Picture1”、“Picture2”、“Picture3”、“Picture4”、“Picture5”};
图片字典。添加(“标题”、“图片”);
添加(“儿童”,picturesDictionaryChildren);
目录。添加(文档目录);
目录。添加(图片字典);
您需要一个转换器,可以使用特定键从字典中获取/设置值。使用这样的转换器,您可以按照以下方式进行绑定:{binding converter={StaticResource GetFromDictionaryConverter},ConverterParameter=children}
或{binding converter={StaticResource GetFromDictionaryConverter},ConverterParameter=title}
,假设转换器已添加为一个具有键GetFromDictionaryConverter
的资源,并且它使用converter参数作为键,并假设绑定源是一个字典
。在找到类似的答案后,我刚刚编辑了这个问题。然而,我的字典列表可以嵌套到任意级别。似乎只有一级子节点。如果子节点也有子节点,那么模板是否应该工作?
Dictionary<string, object> documentsDictionary = new Dictionary<string, object>();
List<string> documentsDictionaryChildren = new List<string> { "Document1", "Document2", "Document3", "Document4", "Document5" };
documentsDictionary.Add("Title", "Documents");
documentsDictionary.Add("Children", documentsDictionaryChildren);
Dictionary<string, object> picturesDictionary = new Dictionary<string, object>();
List<string> picturesDictionaryChildren = new List<string> { "Picture1", "Picture2", "Picture3", "Picture4", "Picture5" };
picturesDictionary.Add("Title", "Pictures");
picturesDictionary.Add("Children", picturesDictionaryChildren);
Directories.Add(documentsDictionary);
Directories.Add(picturesDictionary);