2

我需要在 WPF 中创建一个看起来像这样的 TreeView:

  • 管理员(组)
    • 用户 (固定节点)
      • 爱丽丝亚当斯(用户)
      • 鲍勃·布朗(用户)
    • 权限 (固定节点)
      • 删除(权限)
      • 更新(许可)
  • 嘉宾(组)
    • 用户 (固定节点)
      • 查理克拉克(用户)
    • 权限 (固定节点)
      • 查看(权限)

我有一个组列表,每个组有 3 个属性:

  • 名称(字符串)
  • 用户(列表)
  • 权限(列表)

只显示用户或权限很容易:

        <TreeView ItemsSource="{Binding Groups}">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Users}">
                    <TextBlock Text="{Binding GroupName}" />

                    <HierarchicalDataTemplate.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding UserName}" />
                        </DataTemplate>
                    </HierarchicalDataTemplate.ItemTemplate>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>

但我需要添加 2 个节点(用户和权限),它们展开以显示 2 个列表。

任何建议都非常感谢...

4

1 回答 1

3

您可以使用带有转换器的 MultiBinding 来执行以下操作:

<HierarchicalDataTemplate DataType="{x:Type local:GroupClass}">
        <HierarchicalDataTemplate.ItemsSource>
            <MultiBinding Converter="{StaticResource converter-that-returns-lists-as-is}">
                <Binding Path="Users"/>
                <Binding Path="Permissions"/>
            </MultiBinding>
        </HierarchicalDataTemplate.ItemsSource>
        <TextBlock Text="{Binding Path=Name}"/>
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="IEnumerable[UserClass]" ItemsSource="{Binding Path=.}">
        <TextBlock Text="Users"/>
    </HierarchicalDataTemplate>

    <DataTemplate DataType="{x:Type local:UserClass}">
        <TextBlock Text="{Binding Path=Name}"/>
    </DataTemplate>

    <HierarchicalDataTemplate x:Key="IEnumerable[PermissionClass]" ItemsSource="{Binding Path=.}">
        <TextBlock Text="Permissions"/>
    </HierarchicalDataTemplate>

    <DataTemplate DataType="{x:Type local:PermissionClass}">
        <TextBlock Text="{Binding Path=Name}"/>
    </DataTemplate>

转换器只会将未修改的列表返回为IEnumerable<T>.

于 2012-10-19T18:03:45.190 回答