具有多个级别但对象类型相同的 TreeView [英] TreeView with multiple levels but same object type

查看:30
本文介绍了具有多个级别但对象类型相同的 TreeView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个具有多个级别但只有一种类型 (IPermission) 的 TreeView

I'm trying to create a TreeView with multiples levels but only one type (IPermission)

像这样:

--[X] Permission1
----[X] Permission1_1
------[] Permission1_1_1
----[] Permission1_2
----[] Permission1_3
--[X]Permission2

例如可以使用 CheckBox 选择每个级别.

And with a possibility of selecting each level with a CheckBox for example.

这是我的对象:

public interface IPermission
{
    int ParentID { get; set; }
    int ID { get; set; }
    string Title { get; set; }
    bool Value { get; set; }
    List<IPermission> Children { get; set; }
}

我使用了 HierarchicalDataTemplate/DataTemplate/CompositeCollection 但没有找到解决方案.

I worked with HierarchicalDataTemplate / DataTemplate / CompositeCollection but did not find a solution.

这是我所做的一个例子:

Here is an example of what I've done :

            <TreeView>
                <TreeViewItem Header="Nom" ItemsSource="{Binding Permissions}">
                    <TreeViewItem.ItemTemplate>
                        <HierarchicalDataTemplate ItemsSource="{Binding}">
                            <StackPanel Orientation="Horizontal">
                                <CheckBox Margin="2" Tag="{Binding Path=Value}" />
                                <TextBlock Text="{Binding Path=Title}" FontWeight="SemiBold" />
                            </StackPanel>
                        </HierarchicalDataTemplate>
                        <!-- How to display the Children ? -->
                    </TreeViewItem.ItemTemplate>
                </TreeViewItem>
            </TreeView>

推荐答案

您的 XAML 标记不正确.

Your XAML markup is incorrect.

您需要在 TreeView 中定义一个 ItemTemplate,而不是在 TreeViewitem 中.

You need to define an ItemTemplate in the TreeView, not in the TreeViewitem.

其次,您需要设置HierarchicalDataTemplateItemsSource 以显示对象层次结构.

Secondly, you need to set the ItemsSource of the HierarchicalDataTemplate in order to display the objects hierarchy.

此外,为什么要绑定 CheckBoxTag 属性而不是使用 IsChecked 属性?

Furthermore, why are you binding the Tag property of the CheckBox instead of using the IsChecked property?

<TreeView ItemsSource="{Binding Permissions}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <StackPanel Orientation="Horizontal">
                <CheckBox Margin="2" IsChecked="{Binding Value}" />
                <TextBlock Text="{Binding Title}" FontWeight="SemiBold" />
            </StackPanel>
        </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate>
</TreeView>

这篇关于具有多个级别但对象类型相同的 TreeView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆