2015-02-07 1 views
1

Я ищу вид, который известен как LongListSelector на Windows Phone. Это список с заголовками групп. При нажатии на заголовок группы отображается только список групп. Нажатие группы в списке групп скрывает список групп и прокручивает представление к выбранной группе. Это очень полезный способ группировки длинных списков с удобной навигацией между группами. Если есть альтернативы, подходящие для той же цели, что было бы замечательно.ListView с заголовками (LongListSelector) для Xamarin.Forms

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 делать больше работы.