如何在 Xamarin Forms 中显示嵌套的项目列表?

How can I display a nested list of items in Xamarin Forms?

我正在尝试让 Xamarin Forms 在列表中显示列表。我看到其他人说不支持嵌套在 ListView 中的 ListView。我试图在 ListView 中添加一个控件,并将嵌套列表绑定到该控件,但是每当我尝试绑定它时,我的应用程序总是崩溃。

我还发现有些人建议使用分组。分组确实有效,但是我发现的问题是我无法点击分组部分。另外分组不会实时更新(这是一个要求)。

对于最终结果,我想要一些简单的东西:

下面是我想在我的 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 Forms 执行此操作的任何建议。

如果我要显示不同项目的列表,我可能会使用 TableView 而不是 ListView。 TableView 不是数据绑定的,因此您必须手动构建它们,但它们允许您根据每行中显示的数据灵活地拥有不同类型的单元格。

如果您想坚持使用分组的 ListView,您可以创建一个自定义组 header 视图,其中包含一个可以响应点击手势的按钮(或其他元素)。

我会说跳过 XAML 并按照您希望的方式在代码中进行布局。

使用 StackLayouts and\or 网格,不要依赖半神奇的 ListViews 数据绑定。好几次我都从 ListView 开始,后来我发现它与 ForEachLoop 一起使用。您可以在代码中做您在 XAML 中可以做的任何事情,最后您可能会更快乐。