1

我想在深度为 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 中创建自定义类型?

4

1 回答 1

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>
于 2013-03-25T21:35:07.263 回答