You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI中如何实现包含不同父子节点的TreeView?

解决WinUI TreeView无法显示Wire子节点的问题

问题根源分析

你代码里存在三个关键问题导致Wire子节点无法显示:

  1. 属性名称不匹配:Silos类里的集合属性叫WiresObservable,但XAML里绑定的是Wires,绑定路径错误
  2. Wire类无公开可绑定属性:Wire类只有私有字段id和number,没有公开的可读属性,无法用于绑定显示
  3. 未定义子节点的DataTemplate:TreeViewItem没有指定Wire对应的渲染模板,即使绑定了集合也不知道如何展示子项

修正后的代码

1. 修正Silos类(对齐绑定属性名称)

public class Silos : BindableBase
{
    private ObservableCollection<Wire> wires;

    // 确保属性名称和XAML绑定路径一致
    public ObservableCollection<Wire> Wires
    {
        get => wires; 
        set => SetProperty(ref wires, value);
    }

    // 补充Name属性(你XAML里绑定了该属性,原代码未显示)
    private string name;
    public string Name
    {
        get => name;
        set => SetProperty(ref name, value);
    }

    // 构造函数初始化集合,避免绑定到null
    public Silos()
    {
        Wires = new ObservableCollection<Wire>();
    }
}

2. 修正Wire类(添加公开可绑定属性)

public class Wire : BindableBase
{
    private int id;
    public int Id
    {
        get => id;
        set => SetProperty(ref id, value);
    }

    private int number;
    public int Number
    {
        get => number;
        set => SetProperty(ref number, value);
    }
}

3. 修正TreeView的XAML(添加子节点模板)

<TreeView x:Name="TreeSilos" SelectionMode="Multiple" ItemsSource="{x:Bind ViewModel.Siloses}">
    <TreeView.ItemTemplate>
        <DataTemplate x:DataType="local:Silos">
            <TreeViewItem ItemsSource="{x:Bind Wires, Mode=OneWay}" Content="{x:Bind Name}">
                <!-- 定义Wire子节点的显示模板 -->
                <TreeViewItem.ItemTemplate>
                    <DataTemplate x:DataType="local:Wire">
                        <!-- 自定义Wire的显示内容,可根据需求调整 -->
                        <TextBlock Text="{x:Bind String.Format('编号: {0} | ID: {1}', Number, Id)}" />
                    </DataTemplate>
                </TreeViewItem.ItemTemplate>
            </TreeViewItem>
        </DataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

额外检查项

  • 确认ViewModel.Siloses是ObservableCollection<Silos>类型,且已正确填充数据
  • 确认每个Silos对象的Wires集合中已添加Wire实例

内容的提问来源于stack exchange,提问作者Maclay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 00:04:58