具有多个 类 的递归树视图

Recursive Treeview with multiple classes

设置

我有一个带有 ObservableCollection<StructureItem> 的 ViewModel 和一个用于显示它的视图。 class 本身是递归的:

public class StructureItem
{
        public List<StructureItem> Children { get; set; } = new List<StructureItem>();

        public List<IoItem> Ios { get; set; } = new List<IoItem>();

        public string Name { get; set; }
}

这里是 IoItem

public class IoItem
{
    public string Name { get; set; }

    public int Position { get; set; }
}

目前xaml为TreeView

<TreeView ItemsSource = "{Binding Structure}">
            <TreeView.Resources>
                <DataTemplate DataType="kernel:IoItem">
                    <Label Content="{Binding Name}"></Label>
                </DataTemplate>
            </TreeView.Resources>
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="kernel:StructureItem">
                    <Label Content="{Binding Name}"></Label>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
</TreeView>

问题

我尝试了多种不同的 xaml,但我得到的最好结果是 StructureItem 显示正确(见上文)。 IoItem 要么被忽略,要么破坏整个 Treeview。

如何使用xaml显示这个结构?

如果您想查看 IoItem 的名称,只需将它们添加到 ItemTemplate,例如ListBox:

<TreeView ItemsSource = "{Binding Structure}">
    <TreeView.Resources>
        <DataTemplate DataType="{x:Type kernel:IoItem}">
            <Label Content="{Binding Name}"></Label>
        </DataTemplate>
    </TreeView.Resources>
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="kernel:StructureItem">
            <StackPanel>
                <Label Content="{Binding Name}"></Label>
                <ListBox ItemsSource="{Binding Ios}"/>
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>