.NET 多平台应用 UI(.NET MAUI) CollectionView 是一种视图,用于显示使用不同的布局规范的数据列表。 它旨在提供更灵活、更高性能的 ListView替代方法。
以下屏幕截图显示了一个 CollectionView 使用双列垂直网格并允许进行多个选择的屏幕截图:
CollectionView 应用于显示需要滚动或选择的数据列表。 当要显示的数据不需要滚动或选择时,可以使用可绑定布局。 有关详细信息,请参阅 BindableLayout。
注释
在 iOS 和 Mac Catalyst 上,在 .NET 9 中可选的优化处理程序是 .NET 10 中的默认处理程序 CollectionView ,可提供改进的性能和稳定性。
还原为 .NET 9 行为
建议使用新处理程序, CollectionView但如果想要选择退出此行为并还原回 .NET 9 处理程序,则可以在代码 MauiProgram.cs中使用以下代码。
#if IOS || MACCATALYST
builder.ConfigureMauiHandlers(handlers =>
{
handlers.AddHandler<Microsoft.Maui.Controls.CollectionView, Microsoft.Maui.Controls.Handlers.Items.CollectionViewHandler>();
});
#endif
CollectionView 和 ListView 差异
CollectionView虽然 API ListView 类似,但存在一些显著差异:
- CollectionView 具有灵活的布局模型,允许在列表或网格中垂直或水平呈现数据。
- CollectionView 支持单选和多选。
- CollectionView 没有单元格的概念。 相反,数据模板用于定义列表中每个数据项的外观。
- CollectionView 自动利用基础本机控件提供的虚拟化。
- CollectionView 减少 . 的 ListViewAPI 图面。 许多属性和事件 ListView 不存在于 CollectionView.
- CollectionView 不包括内置分隔符。
-
CollectionView 如果在 UI 线程之外更新异常
ItemsSource,将引发异常。
从 ListView 移动到 CollectionView
ListView 可通过下表的帮助将实现迁移到 CollectionView 实现:
| 概念 | ListView API | CollectionView |
|---|---|---|
| Data | ItemsSource |
通过设置数据ItemsSource属性填充 ACollectionView。 有关详细信息,请参阅 使用数据填充 CollectionView。 |
| 项外观 | ItemTemplate |
CollectionView通过将属性设置为 ItemTemplate aDataTemplate. 有关详细信息,请参阅 “定义项”外观。 |
| 细胞 | TextCell、ImageCell、ViewCell | CollectionView 没有单元格的概念,因此没有披露指标的概念。 相反,数据模板用于定义列表中每个数据项的外观。 |
| 行分隔符 |
SeparatorColor、SeparatorVisibility |
CollectionView 不包括内置分隔符。 如果需要,可以在项模板中提供这些内容。 |
| 选择 |
SelectionMode、SelectedItem |
CollectionView 支持单选和多选。 有关详细信息,请参阅 配置 CollectionView 项选择。 |
| 行高 |
HasUnevenRows、RowHeight |
在 a 中 CollectionView,每个项的行高由 ItemSizingStrategy 属性确定。 有关详细信息,请参阅 项大小调整。 |
| Caching | CachingStrategy |
CollectionView 自动使用基础本机控件提供的虚拟化。 |
| 页眉和页脚 |
Header、HeaderElement、HeaderTemplate、Footer、FooterElement、FooterTemplate |
CollectionView可以通过 和属性显示一个页眉和页脚,该页眉和FooterTemplate页脚随列表中的HeaderTemplateHeaderFooter项一起滚动。 有关详细信息,请参阅 页眉和页脚。 |
| Grouping |
GroupDisplayBinding、GroupHeaderTemplate、GroupShortNameBinding、IsGroupingEnabled |
GroupHeaderTemplateDataTemplate对象来自定义组页眉和GroupFooterTemplate组页脚。 有关详细信息,请参阅 在 CollectionView 中显示分组数据。 |
| 下拉以刷新 |
IsPullToRefreshEnabled、IsRefreshing、RefreshAllowed、RefreshCommand、RefreshControlColor、BeginRefresh()、EndRefresh() |
将拉取刷新功能设置为 |
| 上下文菜单项 | ContextActions |
上下文菜单项通过设置一个 SwipeView 作为根视图来支持,该视图 DataTemplate 定义每个数据项的外观 CollectionView。 有关详细信息,请参阅 上下文菜单。 |
| 滚动 | ScrollTo() |
CollectionView
ScrollTo定义将项滚动到视图中的方法。 有关详细信息,请参阅 CollectionView 中的控件滚动。 |
浏览示例