Avalonia DataGrid 无内置分页,需通过数据层分页实现:手动管理页码状态并替换 ObservableCollection;或集成 PaginationControl 等第三方控件;服务端分页推荐用于大数据,配合异步加载与错误处理;辅以渲染优化提升性能。
Avalonia 的 DataGrid 本身不内置分页控件,也不支持服务端分页或虚拟滚动式分页,但可以通过“数据层分页 + UI 触发机制”来实现类似效果。核心思路是:只加载当前页的数据,配合分页导航按钮(如上一页/下一页/跳转)动态请求或切换数据源。
最直接的方式是维护当前页码、每页条数、总记录数等状态,每次翻页时重新生成一个子集的 ObservableCollection 并赋值给 DataGrid.ItemsSource:
CurrentPage、PageSize、TotalCount)LoadPage(int page) 方法,从原始数据(或通过 API)截取对应范围数据new ObservableCollection(data.Skip((page-1)*PageSize).Take(PageSize)) 创建新集合DataGrid.ItemsSource,注意要替换整个集合(不是 Clear+Add),否则可能触发重绘异常社区已有轻量分页控件(如 Avalonia.Controls.Pagination),它提供 PaginationControl,可绑定页码变化事件:
Curre
ntPage 属性变更,触发数据重载若数据来自后端 API(如 REST),应避免一次性拉取全部数据。典型做法:
page 和 pageSize 查询参数(例如 /api/users?page=2&pageSize=20)IAsyncRelayCommand 封装异步加载逻辑,显示加载状态(如禁用按钮、加 Loading 提示)ItemsSource 和 TotalCount,分页控件会自动刷新页码总数即使做了分页,也要注意 DataGrid 渲染效率:
INotifyPropertyChanged(仅当需要局部刷新时)CanUserResizeColumns="False"、CanUserSortColumns="False" 可提升初始渲染速度DataGridTemplateColumn 中嵌套复杂控件;简单展示优先用 DataGridTextColumn
ScrollViewer.ViewChanged 监听到底部,再加载下一页(需自行控制防重复触发)基本上就这些。Avalonia 分页本质是数据驱动,没有“开箱即用”的分页 DataGrid,但逻辑清晰、控制自由度高。关键是把分页逻辑收口到 ViewModel,UI 层只负责触发和展示。