MAUI 的 CollectionView 是替代传统 ListView 的现代化列表控件,核心优势在于高性能(默认启用虚拟化)、灵活布局(线性/网格/分组)和原生跨平台一致性。用对关键点,不写多余代码也能跑得稳。
基础绑定与显示
只需三步就能让数据动起来:
在 XAML 中声明 CollectionView,并绑定ItemsSource(必须是
ObservableCollection<t></t>或实现
INotifyCollectionChanged的集合) 用
ItemTemplate定义每项长什么样,推荐内联
DataTemplate或提取为资源 后台代码中初始化集合并赋值给绑定源,确保设置
BindingContext
示例片段:
选中与交互控制
默认不响应点击,需显式开启选择能力:
设SelectionMode为
Single(单选)或
Multiple(多选),
None是默认禁用状态 绑定
SelectedItem(单选)或
SelectedItems(多选)到 ViewModel 属性,支持双向绑定 监听
SelectionChanged事件或绑定
SelectionChangedCommand做后续逻辑
注意:选中项高亮样式由平台原生提供,无需额外写模板,除非你自定义了
Visual或容器背景。
分组显示与空状态处理
真实业务常要分类展示或兜底提示:
启用分组:设IsGrouped="True",数据源必须是
IEnumerable<tgroup></tgroup>,其中
TGroup继承
IList<titem></titem>并带
Name等分组标识属性 定义
GroupHeaderTemplate控制每组标题外观,
GroupFooterTemplate可选 空数据时用
EmptyView——可以是纯文本字符串,也可以是完整布局(如图标+提示文字+按钮)
性能关键配置
大数据量下卡顿?重点检查这三项:
确认没手动关闭虚拟化:ItemsLayout不要设
ItemSizingStrategy="MeasureAllItems",保持默认
MeasureFirstItem滚动时避免频繁刷新整个集合,改用
ObservableCollection<t></t>的
Add/
Remove/
Move方法做增量更新 图片类内容务必配合
FFImageLoading或 MAUI 内置
Image的缓存策略,禁用
CacheEnabled="False"
基本上就这些。不需要封装复杂基类,按需组合属性就能覆盖 95% 场景。
