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

如何在WinUI 3中填充按年份分组的Visit数据TreeView

WinUI 3 按年份分组填充 TreeView 实现方案

注:你提供的Visit模型存在语法错误,int属性缺少名称,以下默认修正为Id:

public class Visit
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
    public string VisitNo { get; set; }
    public string Details { get; set; }
}

1. 定义分层数据模型

创建用于TreeView显示的分组模型,存储年份及对应VisitNo列表:

public class YearGroup
{
    public int Year { get; set; }
    public List<string> VisitNos { get; set; } = new List<string>();
}

2. 对原始数据分组处理

通过LINQ将Visit列表按年份分组,转换为TreeView所需的数据源:

// 示例原始数据
var visits = new List<Visit>
{
    new Visit { Date = new DateTime(2022, 1, 1), VisitNo = "0001" },
    new Visit { Date = new DateTime(2022, 2, 1), VisitNo = "0002" },
    new Visit { Date = new DateTime(2023, 1, 1), VisitNo = "0003" },
    new Visit { Date = new DateTime(2023, 2, 1), VisitNo = "0004" },
    new Visit { Date = new DateTime(2023, 3, 1), VisitNo = "0005" }
};

// 分组并生成数据源
var groupedData = visits
    .GroupBy(v => v.Date.Year)
    .Select(g => new YearGroup
    {
        Year = g.Key,
        VisitNos = g.Select(v => v.VisitNo).ToList()
    })
    .OrderBy(g => g.Year)
    .ToList();

3. XAML 配置 TreeView

在页面XAML中定义TreeView的层级模板,分别渲染年份根节点和VisitNo子节点:

<TreeView x:Name="VisitTreeView">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding VisitNos}"
                                  ItemTemplate="{StaticResource VisitNoTemplate}">
            <!-- 年份根节点模板 -->
            <TextBlock Text="{Binding Year}" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>

    <!-- VisitNo子节点模板 -->
    <TreeView.Resources>
        <DataTemplate x:Key="VisitNoTemplate">
            <TextBlock Text="{Binding}" Margin="10,0,0,0" />
        </DataTemplate>
    </TreeView.Resources>
</TreeView>

4. 绑定数据到 TreeView

在页面代码后台的生命周期方法(如OnNavigatedTo)中设置数据源:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    VisitTreeView.ItemsSource = groupedData;
}

完成以上步骤后,TreeView会按年份分组显示,展开根节点即可看到对应年份的所有VisitNo,与你期望的显示效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:57:25