Как отобразить вложенный список элементов в формах Xamarin?
Я пытаюсь заставить формы Xamarin отображать список в списке. Я видел, как другие люди говорят, что ListView, вложенный в ListView, не поддерживается. Я попытался добавить элемент управления в ListView и привязать вложенный список к элементу управления, но это всегда приводит к сбою моего приложения всякий раз, когда я пытаюсь привязаться к нему.
Я также обнаружил, что некоторые люди предлагают использовать группировку. Группировка работает, однако проблемы, которые я нашел с этим, я не могу нажать на группировку раздел. Также группировка не будет обновляться в режиме реального времени (это требование).
для конечного результата, я хотел бы примерно так:
- ApartmentName1
- адрес
- Менеджер Номер Телефона
- Арендатор 1, Номер Телефона
- Арендатор 2, Номер Телефона
- Арендатор 3, Номер Телефона
- ApartmentName2
- адрес
- Менеджер Телефона Номер
- Арендатор 1, Номер Телефона
- Арендатор 2, Номер Телефона
- Арендатор 3, Номер Телефона
Ниже приведен пример объекта, который я хотел бы отобразить в моем проекте Xamarin Forms.
public class Apartment
{
public string ApartmentName { get; set; }
public string Address { get; set; }
public string ManagerPhoneNumber { get; set; }
public List<Tenant> Tenants { get; set; }
}
public class Tenant
{
public string FullName { get; set; }
public string PhoneNumber { get; set; }
public DateTime ContractExpireDate { get; set; }
}
вот Xaml, который я пытался заставить работать
<ContentView>
<StackLayout>
<ListView x:Name="apartmentListView" HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout VerticalOptions="StartAndExpand">
<StackLayout Orientation="Horizontal" BackgroundColor="Gray">
<Label HorizontalOptions="StartAndExpand" Text="{Binding ApartmentName}" />
<Label HorizontalOptions="End" Text="{Binding Address}" />
</StackLayout>
<Label Text="{Binding ManagerPhoneNumber}" />
<control:TenantViewTemplate Tenants="{Binding Tenants}" />
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentView>
Я только пытаюсь показать список, который содержит список. Я открыт для любых предложений о том, как это сделать с помощью форм Xamarin.
2 ответов
Я бы сказал, пропустите XAML и просто выложите его так, как вы хотите в коде.
используйте StackLayouts и\или сетки и не полагайтесь на полу магическую привязку данных ListViews. Несколько раз я начинал с ListView только для того, чтобы позже добраться до того, что я соскреб его с ForEachLoop. Вы можете делать что угодно в коде, который вы можете сделать в XAML, и вы, вероятно, будете счастливее в конце.
Если бы я собирался отобразить список несхожих элементов, я бы, вероятно, использовал TableView вместо ListView. Табличные представления не связаны с базой данных, поэтому их нужно создавать вручную, но они позволяют гибко использовать разные типы ячеек в зависимости от данных, отображаемых в каждой строке.
Если вы хотите придерживаться сгруппированного ListView, вы можете создать пользовательский вид заголовка группы, который содержит кнопку (или другой элемент), который может реагировать на жесты крана.