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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:45:32