在WPF中使用Grid的Treeview

时间:2013-03-25 20:48:23

标签: wpf xaml mvvm

我想在树视图中以1级深度显示数据库的简单模式。 所以我有一个表的集合,其名称我想显示为元素的标题,并为每个表显示具有名称,类型等的列的集合。

但是在每个表中,我想在网格中显示那些列定义,其中一个头指定了列定义的属性,在每一行中都是定义本身。

实现这项工作的一种方法是将树视图视为每个表序列 一个孩子(整个集合)列定义),然后显示为网格:

<TreeView  ItemsSource="{Binding Tables}" x:Name="treeView"  MinWidth="400" >
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Path=ListofONEelement}">
        <TextBlock Text="{Binding Path=TableName}" />
        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate>
            <ListView ItemsSource="{Binding GroupOfColumnDefinition}">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="ColumnName"   DisplayMemberBinding="{Binding Path=Item1}" />
                        <GridViewColumn Header="Model"        DisplayMemberBinding="{Binding Path=Item2.Model}" />
                        <GridViewColumn Header="ColumnStatus" DisplayMemberBinding="{Binding Path=Item2.ColumnStatus}" />
                        <GridViewColumn Header="ColumnType"   DisplayMemberBinding="{Binding Path=Item2.ColumnType}" />
                    </GridView>
                </ListView.View>
            </ListView>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

但我必须创建这个中间结构ListofONEelement才能使其正常工作,因为只有存在要枚举的项目时才存在树视图中的层次结构。

是否还有其他更好的方法,直接在XAML中,这不需要在我的ViewModel中创建自定义类型?

1 个答案:

答案 0 :(得分:3)

实际上将一个项目放在TreeView中。不要使用HierarchicalDataTemplate。

<TreeView ItemsSource="{Binding Tables}">
    <TreeView.ItemTemplate>
        <DataTemplate>
            <TreeViewItem Header="{Binding TableName}">
                <ListView ItemsSource="{Binding GroupOfColumnDefinition}">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Header="ColumnName"   DisplayMemberBinding="{Binding Path=Item1}" />
                            <GridViewColumn Header="Model"        DisplayMemberBinding="{Binding Path=Item2.Model}" />
                            <GridViewColumn Header="ColumnStatus" DisplayMemberBinding="{Binding Path=Item2.ColumnStatus}" />
                            <GridViewColumn Header="ColumnType"   DisplayMemberBinding="{Binding Path=Item2.ColumnType}" />
                        </GridView>
                    </ListView.View>
                </ListView>
            </TreeViewItem>
        </DataTemplate>
    </TreeView.ItemTemplate>
</TreeView>
相关问题