将Dictionary<string,List<Class>>绑定到TreeView

3

我有一个集合

Dictionary<string, List<Manager>> Stuff;

Manager是一个带有一些属性的类。 我想要将这个字典绑定到TreeView或者ListView上,如下所示:

使用Key作为标题,然后将Manager列表作为子节点。例如:

  • Director(它是字典中的键)
    • John(它是Manager.Name属性)
    • Steve
  • Owner
    • Jack

我尝试了以下代码:

<TreeView ItemsSource="{Binding Stuff}">
                    <TreeView.ItemTemplate>
                        <HierarchicalDataTemplate>
                            <TextBlock Foreground="Red" Text="{Binding Key}" />
                        </HierarchicalDataTemplate>
                    </TreeView.ItemTemplate>
</TreeView>

它显示了标题,但我不知道如何进一步处理。或者也许更好的方法是改变收集方式并以其他方式绑定它。

编辑

我用这个字典不必要地复杂化了工作。我创建了一个类Stuff,其中包含属性string Name;List<Managers> Managers;
在主类中使用ObservableCollection<Stuff> Stuff;,并且与这个XAML配合使用效果很好:

<TreeView ItemsSource="{Binding Stuff}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Managers}">
            <TextBlock Foreground="Red" Text="{Binding Name}" />
            <HierarchicalDataTemplate.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}" />
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

所以,在这种情况下使用字典并不是最好的选择。
2个回答

3

请尝试以下方法:

<TreeView Name="treeView1" ItemsSource="{Binding Stuff}" >
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Path=Value}">
            <TextBlock Foreground="Red" Text="{Binding Path=Key}" />
            <HierarchicalDataTemplate.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}"/>
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

1

试试这个:

<TreeView ItemsSource="{Binding Stuff}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Values}">
            <TextBlock Foreground="Red" Text="{Binding Key}" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

然而,我始终建议使用一个ObservableCollection<CustomDataType>作为ItemsSource,因为它使整个工作更简单。有关HierarchicalDataTemplate的更多帮助,请参阅MSDN上的HierarchicalDataTemplate页面。

它不起作用,而且只显示键而没有值,但没关系。我编辑了我的帖子。 - Powderek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接