XAML 使用包含嵌套列表的列表填充WPF树视图

njthzxwz  于 2023-03-16  发布在  其他
关注(0)|答案(1)|浏览(176)

我在应用程序中得到了以下设置;
5种数据类型;

  • 面积
  • 系统
  • 设备
  • 器械
  • 信号

现在,Area始终是最高级别,但可以包含所有其他四种类型的子类型--所以我添加了一个Area列表,在每个Area下面将有一个其他类型的嵌套列表。
系统将始终是Area的子项,但可以包含最后三种类型的子项,依此类推。
See my nested layout here
现在我想用这个嵌套布局填充一个树形视图。我已经用其他类型的嵌套列表创建了一个区域列表-但是我如何得到一个树形视图来显示这个层次结构呢?

bqujaahr

bqujaahr1#

您正在查找HierarchicalDataTemplateDataTemplate。因为您的TreeView应该支持多个不同的模板,所以您应该将它们放在TreeView的资源中。

<TreeView ItemsSource="{Binding Path=CollectionWithRootElement}">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type blabla:Area}" ItemsSource="{Binding Path=SubItemsCollectionOfThisType}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="Area Type" />
            </StackPanel>
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="{x:Type blabla:System}" ItemsSource="{Binding Path=SubItemsCollectionOfThisType}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="System Type" />
            </StackPanel>
        </HierarchicalDataTemplate>
        <DataTemplate DataType="{x:Type blabla:Signal}" >
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="Signal Type" />
            </StackPanel>
        </DataTemplate>
    </TreeView.Resources>
</TreeView>

需要注意的几点:

  • TreeView需要绑定到一个Collection,如果只有一个Area,则可能需要创建一个只有一个Area元素的集合。
  • HierarchicalDataTemplate有子级,而DataTemplate没有。因此,任何具有嵌套集合的类都由HierarchicalDataTemplate表示。没有其他子级的“Leaf”元素由DataTemplate表示。
  • 上面的XAML使用了虚拟名称空间blabla。您必须调整它以满足您的需要,例如<Window xmlns:blabla="clr-namespace:MyApp.Namespace"></Window>

相关问题