CollectionView 是使用不同布局规范显示数据列表的视图。 它的目标是提供取代 ListView 的更灵活、更高效的方案。 例如,以下屏幕截图显示的 CollectionView 使用了一个两列垂直网格,并且它允许多选:
CollectionView 应用于显示需要滚动或选择的数据列表。 当要显示的数据不需要滚动或选择时,可以使用可绑定布局。 有关详细信息,请参阅 Xamarin.Forms 中的可绑定布局。
CollectionView 从 Xamarin.Forms 4.3 起可用。
重要
CollectionView 在 iOS 和 Android 上可用,但在通用 Windows 平台上仅部分可用。
CollectionView 和 ListView 的区别
虽然 CollectionView 和 ListView API 很相似,但也存在一些显著的差异:
- CollectionView具有灵活的布局模型,允许在列表或网格中垂直或水平显示数据。
- CollectionView支持单项和多项选择。
- CollectionView没有单元格的概念。 实际上,会使用一个数据模板来定义列表中每个数据项的外观。
- CollectionView可自动利用基础本机控件提供的虚拟化。
- CollectionView可减少- ListView的 API 图面。- ListView中的许多属性和事件不会出现在- CollectionView中。
- CollectionView不包含内置分隔符。
- 如果 ItemsSource在 UI 线程之外更新,CollectionView将触发异常。
从 ListView 迁移到 CollectionView
可以根据下表的帮助信息,将现有 Xamarin.Forms 应用程序中的 ListView 实现迁移到 CollectionView 实现:
| 概念 | ListView API | CollectionView | 
|---|---|---|
| 数据 | ItemsSource | 可通过设置 CollectionView的ItemsSource属性来向其填充数据。 有关详细信息,请参阅使用数据填充 CollectionView。 | 
| 项外观 | ItemTemplate | 通过将 ItemTemplate属性设置为DataTemplate,可以定义CollectionView中每个项的外观。 有关详细信息,请参阅定义项外观。 | 
| 单元 | .- . | CollectionView没有单元格的概念,因此也没有披露指示器的概念。 实际上,会使用一个数据模板来定义列表中每个数据项的外观。 | 
| 行分隔符 | %> | CollectionView不包含内置分隔符。 如果需要,可以在项模板中提供这些内容。 | 
| 选择 | %> | CollectionView支持单项和多项选择。 有关详细信息,请参阅 Xamarin.Forms CollectionView 选择。 | 
| 行高 | %> | 在 CollectionView中,每个项的行高由ItemSizingStrategy属性确定。 有关详细信息,请参阅调整项大小。 | 
| 缓存 | CachingStrategy | CollectionView将自动使用基础本机控件提供的虚拟化。 | 
| 页眉和页脚 | CollectionView可以通过Header、Footer、HeaderTemplate和FooterTemplate属性显示随列表中的项目滚动的页眉和页脚。 有关详细信息,请参阅页眉和页脚。 | |
| 分组 | CollectionView通过将其IsGrouped属性设置为true来显示正确分组的数据。 通过将GroupHeaderTemplate和GroupFooterTemplate属性设置为DataTemplate对象,可以自定义组页眉和组页脚。 有关详细信息,请参阅 Xamarin.Forms CollectionView 分组。 | |
| 下拉以刷新 | 通过将 CollectionView设置为RefreshView的子级,支持“下拉以刷新”功能。 有关详细信息,请参阅下拉以刷新。 | |
| 上下文菜单项 | ContextActions | 可通过将 SwipeView设置为DataTemplate中的根视图来支持上下文菜单项,该视图定义了CollectionView中每个数据项的外观。 有关详细信息,请参阅上下文菜单。 | 
| 滚动 | ScrollTo() | CollectionView定义将项滚动到视图中的ScrollTo方法。 有关详细信息,请参阅滚动。 | 
