用于 Xamarin.Forms 的带有标头 (LongListSelector) 的 ListView

Posted

技术标签:

【中文标题】用于 Xamarin.Forms 的带有标头 (LongListSelector) 的 ListView【英文标题】:ListView with headers (LongListSelector) for Xamarin.Forms 【发布时间】:2015-02-07 12:47:12 【问题描述】:

我正在 Windows Phone 上寻找一个名为 LongListSelector 的视图。这是一个带有组标题的列表视图。点击组标题仅显示组列表。在组列表上点击一个组可隐藏组列表并将视图滚动到所选组。这是对长列表进行分组的一种非常有用的方法,可以在组之间轻松导航。如果有适合相同目的的替代品,那也很棒。

【问题讨论】:

【参考方案1】:

你可以轻松做到这一点:)

您需要做的第一件事是确保您的数据源是集合的集合。如果您想要最大的绑定优势,我建议您使用 ObservableCollection>。然后我们可以如下构造我们的listView:

var listView = new ListView ();
listView.SetBinding (ListView.ItemsSourceProperty, "Data");
listView.ItemTemplate = new DataTemplate (typeof (MyCell));
listView.GroupHeaderTemplate = new DataTemplate (typeof (MyHeaderCell));
listView.IsGroupingEnabled = true;
listView.GroupShortNameBinding = new Binding ("Title");

按顺序,我们先绑定我们的数据,我假设这里的BindingContext会继承自页面。我们的数据应该是已经提到的集合的集合。

然后我们像往常一样在ItemTemplate中绑定,我们制作一个GroupHeaderTemplate,这将是正常滚动时列表中显示的模板。接下来我们启用分组以告诉列表将数据用作分组集合而不是平面列表。

最后,我们为 GroupShortName 提供了一个绑定。此绑定针对每个组的集合运行,以获取一个字符串(或将调用 ToString 的对象)以生成您在屏幕截图中显示的跳转列表。

出于性能原因,您可能希望确保在设置其他所有内容之前不设置 ItemsSource,以避免 ListView 尝试实现处于部分配置状态的 Cells。这实际上不会导致错误,它只是迫使 ListView 做更多的工作。

【讨论】:

以上是关于用于 Xamarin.Forms 的带有标头 (LongListSelector) 的 ListView的主要内容,如果未能解决你的问题,请参考以下文章

使用 ShouldOverrideUrlLoading 从 Xamarin.Forms Android webview 检索标头时遇到问题,始终(空)

有没有办法使用 Xamarin.Forms PCL 项目中的 Devexpress.Xamarin.Android.Charts

在 Xamarin.Forms 中具有两个带有数字的选择列的选择器

在 Xamarin Forms 中下载带有进度条的文件

C# Xamarin Forms - 调用事件总是返回 null

在 Xamarin.forms C# 中显示带有 JSON 数据的列表