如何在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
相关产品推荐
相关产品推荐

