绑定字典<string,list <class>&gt; to TreeView </string,list <class>

时间:2013-12-13 14:22:13

标签: c# wpf xaml treeview

我有收藏品

Dictionary<string, List<Manager>> Stuff;

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

键为标题,然后是作为子项的经理列表。例如:

  • 导演(字典中的关键字)
    • John(它的财产Manager.Name)
    • 史蒂夫
  • 所有者
    • 杰克

我试过这样的事情:

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

它显示了标题,但我不知道如何进一步。 或者更改集合并以其他方式绑定它会更好。

修改

我在这个词典中做了不必要的复杂工作。我使用属性string Name;List<Managers> Managers;创建了额外的类Stuff。在主类中使用它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>

所以,在这种情况下使用Dictionairy并不是最好的。

2 个答案:

答案 0 :(得分:2)

试试这个:

<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 :(得分: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 Class页面。