MAUI的CollectionView是高性能、跨平台一致的现代化列表控件,支持虚拟化、多种布局、分组、空状态及选中交互。基础使用三步:XAML声明并绑定ItemsSource、定义ItemTemplate、后台初始化集合并设BindingContext。

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










