MudTable多选仅选中当前显示行的实现方法咨询
MudTable实现当前页范围的全选功能
要实现仅选中当前显示页的行,需要覆盖MudTable默认的全选逻辑,自定义表头的全选复选框并绑定专属的选中处理逻辑,核心是利用MudTable提供的CurrentPageItems属性获取当前页的数据。
实现步骤与代码示例
- 自定义表头全选控件
替换MudTable默认的全选复选框,手动添加MudCheckBox并绑定状态与事件:
<MudTable T="YourDataModel" @bind-SelectedItems="_selectedItems" MultiSelection="true" @ref="_tableRef" RowsPerPageOptions="@(new int[]{10,25,50})"> <HeaderTemplate> <!-- 自定义全选复选框 --> <MudCheckBox @bind-Checked="_isCurrentPageSelected" CheckedChanged="HandleCurrentPageSelectAll" Indeterminate="_isCurrentPagePartiallySelected" /> <!-- 其他表头列 --> <MudTh>字段1</MudTh> <MudTh>字段2</MudTh> </HeaderTemplate> <RowTemplate> <MudTd DataLabel="字段1">@context.Field1</MudTd> <MudTd DataLabel="字段2">@context.Field2</MudTd> </RowTemplate> </MudTable>
- 编写后端逻辑处理全选/取消全选
通过_tableRef.CurrentPageItems获取当前页数据,维护选中项集合并同步全选框状态:
private List<YourDataModel> _selectedItems = new(); private MudTable<YourDataModel> _tableRef; private bool _isCurrentPageSelected; // 判断是否处于半选状态(当前页部分项被选中) private bool _isCurrentPagePartiallySelected { get { var currentPageItems = _tableRef.CurrentPageItems.ToList(); int selectedCount = currentPageItems.Count(item => _selectedItems.Contains(item)); return selectedCount > 0 && selectedCount < currentPageItems.Count; } } // 处理当前页全选/取消全选 private void HandleCurrentPageSelectAll(bool isChecked) { var currentPageItems = _tableRef.CurrentPageItems.ToList(); if (isChecked) { // 加入当前页未被选中的项 foreach (var item in currentPageItems) { if (!_selectedItems.Contains(item)) _selectedItems.Add(item); } } else { // 移除当前页已选中的项 _selectedItems.RemoveAll(item => currentPageItems.Contains(item)); } // 触发UI更新 _selectedItems = new List<YourDataModel>(_selectedItems); } // 同步手动选行时的全选框状态 protected override void OnAfterRender(bool firstRender) { if (!firstRender) { var currentPageItems = _tableRef.CurrentPageItems.ToList(); _isCurrentPageSelected = currentPageItems.All(item => _selectedItems.Contains(item)); StateHasChanged(); } }
关键说明
CurrentPageItems是MudTable内置属性,会自动跟随分页、搜索、排序操作更新,始终返回当前页面显示的所有数据项。- 全选框的
Indeterminate属性用于处理"部分选中"的视觉状态,提升交互体验。 - 通过重新赋值
_selectedItems触发UI更新,确保选中状态实时同步。
内容的提问来源于stack exchange,提问作者Learning Junior
相关产品推荐
相关产品推荐

