2015-02-07 55 views
1

我正在寻找在Windows Phone上称为LongListSelector的视图。这是一个带有组头的列表视图。点击组标题仅显示组列表。点击组列表上的组可隐藏组列表并将视图滚动到所选组。这是一个非常有用的方式,可以轻松地在组之间进行分组。如果有其他替代方案适用于同样的目的,那也是很棒的。Xamarin.Forms的头文件(LongListSelector)ListView

enter image description here

enter image description here

回答

4

你可以做到这一点很容易:)

你需要做的第一件事是确保您的数据源是集合的集合。我会建议一个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尝试实现处于部分配置状态的单元格为止。这实际上不会导致错误,它只是强制ListView做更多的工作。