【问题标题】:Recursive Treeview with multiple classes具有多个类的递归树视图
【发布时间】:2021-09-06 17:34:48
【问题描述】:

设置

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

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; }
}

TreeView 的当前 xaml

<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 显示这个结构?

【问题讨论】:

  • 检查这个似乎类似的问题:stackoverflow.com/questions/15240326/…
  • 你希望看到什么作为节点?
  • @I.Step 我尝试调整这个答案,但我最终在最高级别失败了,只显示了一个 TreeviewItem 类型名称为 StructureItem
  • @Rekshino 现在只有每个孩子和 Io 的名字。一旦可行,我想更改格式以突出显示差异。

标签: c# wpf recursion treeview


【解决方案1】:

如果您想查看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>

【讨论】:

  • 通过 StackPanel (O_o) 将多个项目放入模板中,这就是解决方案,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
相关资源
最近更新 更多