1

データベースの単純なスキーマを1レベルの深さのツリービューで表示したいと思います。そのため、要素のヘッダーとして名前を表示したいテーブルのコレクションがあり、各テーブルには、名前、タイプなどの列のコレクションがあります。

ただし、各テーブルでは、これらの列定義をグリッドに表示し、ヘッダーで列定義のプロパティを指定し、各行で定義自体を表示します。

これを機能させる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ただし、ツリービューの階層は列挙するアイテムがある場合にのみ存在するため、これを機能させるには、この中間構造を作成する 必要がありました。

ViewModelでカスタムタイプを作成する必要がない、XAMLで直接これを行うための他のより良い方法はありますか?

4

1 に答える 1

3

実際に1つのアイテムを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 に答える