Вы можете сделать это изначально в форматах Xamarin с помощью группировки заголовков в ListView. Сначала нужно создать структуру группировки:
public class Grouping<TK, T> : ObservableCollection<T>
{
public TK Key { get; private set; }
public Grouping(TK key, IEnumerable<T> items)
{
Key = key;
foreach (var item in items)
Items.Add(item);
}
}
Создать ViewModel, чтобы обернуть родительскую модель с дополнительным Логическим свойством, чтобы показать, что родитель был выбран/должен показывать свои дочерние элементы:
public class SelectParentViewModel
{
public Parent Parent { get; set; }
public bool Selected { get; set; }
}
В вашем ViewModel страницы создать следующее свойство для привязки к вашему ListView
public ObservableCollection<Grouping<SelectParentViewModel, Child>> Parents { get; set; }
Initlialise родителям содержать новую группу для каждого из ваших родителей с новым пустым литием st для элементов Child.
Добавить команду, которая принимает параметр Grouping<SelectCategoryViewModel, Item>
в качестве параметра. Команда сначала переворачивает свойство «Выделение» ключа группировки. Затем он проверяет новое значение выбранного свойства:
- Если это правда -> заполнит Дочерние элементы
- Если ложь -> Очищает элементы Детские
в вашей ListView
- Привязать свойство ItemsSource к свойству «Категории» и установить значение IsGroupingEnabled в «True»
- Установите ListView.GroupHeaderTemplate в ViewCell для отображения каждого родителя
- Добавить насыпную жест распознаватель к внешней точке зрения в ViewCell, которая вызывает команду либо ясно или заполнить дочерние элементы для родительского
- Установите ListView.ItemTemplate для отображения каждого дочернего элемента
Этот блог описывает группирование в ListViews: http://motzcod.es/post/94643411707/enhancing-xamarinforms-listview-with-grouping
пример форм проекта демонстрирует это доступно на моем GitHub https://github.com/umarmohammed/XFExpandableListView
вы используете Android, IOS, или Xamarin формы? Вы можете сделать это на Android, но не в iOS или Forms без написания пользовательских элементов управления. – Jason
@ Джейсон Я использую Xamarin Forms. – Scko
Вы не можете сделать это изначально в Формах, потому что в iOS нет встроенного элемента управления для его отображения. Вы можете либо написать пользовательский элемент управления, либо написать собственный рендерер. В этом вопросе много дискуссий; или см. это: https://github.com/danvanderboom/Xamarin-Forms-TreeView – Jason