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 方法。 有关详细信息,请参阅滚动。 |
