Как отобразить вложенный список элементов в формах 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, вы можете создать пользовательский вид заголовка группы, который содержит кнопку (или другой элемент), который может реагировать на жесты крана.