MAUI ListView按名称分组组名缺失问题求助
MAUI ListView 按名称分组显示指纹机交易数据问题
我有一个包含约100个Trxs对象的Punch_times列表,Trxs类定义如下:
public class Trxs { public string punch_time { get; set; } public string name { get; set;} }
该列表存储指纹机交易数据,我希望在MAUI的ListView(名称为Trx_List)中按name属性分组显示数据。
我尝试了以下分组代码,虽实现分组但未显示组名:
var sorted = Punch_times.GroupBy(x => x.name) .Select(grp => grp.ToList()) .ToList(); Trx_List.ItemsSource = sorted ;
为此我创建了Grouped_list类用于承载分组数据:
public class Grouped_list { public string emp_name { get; set; } public List<Trxs> trxes { get; set; } }
并创建了对应的列表:
List<Grouped_list> new_list = new List<Grouped_list>();
现求助如何将分组后的数据填充到new_list中,或实现MAUI ListView按名称正确分组显示的方法。
解决步骤
1. 填充分组数据到new_list
通过LINQ直接将分组结果映射到Grouped_list对象,代码如下:
new_list = Punch_times .GroupBy(trx => trx.name) .Select(grp => new Grouped_list { emp_name = grp.Key, trxes = grp.ToList() }) .ToList();
逻辑说明:
- 按
name字段对Punch_times分组 - 每个分组转换为
Grouped_list实例,将分组键(员工名称)赋值给emp_name,分组内的Trxs对象存入trxes列表 - 最终转换为
List<Grouped_list>类型
2. 配置ListView启用分组显示
仅设置ItemsSource无法显示组名,需在XAML中配置分组相关属性:
<ListView x:Name="Trx_List" IsGroupingEnabled="True"> <!-- 组头模板:定义组名显示样式 --> <ListView.GroupHeaderTemplate> <DataTemplate> <ViewCell> <Label Text="{Binding emp_name}" FontSize="Large" FontAttributes="Bold" BackgroundColor="#EEEEEE" Padding="5"/> </ViewCell> </DataTemplate> </ListView.GroupHeaderTemplate> <!-- 列表项模板:显示打卡时间 --> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <Label Text="{Binding punch_time}" Padding="10"/> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView>
关键配置:
- 必须设置
IsGroupingEnabled="True"开启分组功能 GroupHeaderTemplate绑定Grouped_list的emp_name字段,实现组名显示ItemTemplate绑定Trxs对象的punch_time字段,显示单条打卡记录
3. 绑定数据源
最后将填充好的new_list赋值给ListView:
Trx_List.ItemsSource = new_list;
完成以上步骤后,ListView就能按员工名称分组,同时正确显示组名和对应的打卡记录。
内容的提问来源于stack exchange,提问作者Abed ElHameed Jaber
相关产品推荐
相关产品推荐

