Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#WPF-带字典的TreeView绑定_C#_Wpf_Binding_Treeview - Fatal编程技术网

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);