如何在 Xamarin Forms 中显示嵌套的项目列表?
How can I display a nested list of items in Xamarin Forms?
我正在尝试让 Xamarin Forms 在列表中显示列表。我看到其他人说不支持嵌套在 ListView 中的 ListView。我试图在 ListView 中添加一个控件,并将嵌套列表绑定到该控件,但是每当我尝试绑定它时,我的应用程序总是崩溃。
我还发现有些人建议使用分组。分组确实有效,但是我发现的问题是我无法点击分组部分。另外分组不会实时更新(这是一个要求)。
对于最终结果,我想要一些简单的东西:
- ApartmentName1
- 地址
- 经理Phone人数
- 租户 1,Phone 数量
- 租户 2,Phone 数量
- 租户 3,Phone 号码
- 公寓名称2
- 地址
- 经理Phone人数
- 租户 1,Phone 数量
- 租户 2,Phone 数量
- 租户 3,Phone 号码
下面是我想在我的 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 中可以做的任何事情,最后您可能会更快乐。
我正在尝试让 Xamarin Forms 在列表中显示列表。我看到其他人说不支持嵌套在 ListView 中的 ListView。我试图在 ListView 中添加一个控件,并将嵌套列表绑定到该控件,但是每当我尝试绑定它时,我的应用程序总是崩溃。
我还发现有些人建议使用分组。分组确实有效,但是我发现的问题是我无法点击分组部分。另外分组不会实时更新(这是一个要求)。
对于最终结果,我想要一些简单的东西:
- ApartmentName1
- 地址
- 经理Phone人数
- 租户 1,Phone 数量
- 租户 2,Phone 数量
- 租户 3,Phone 号码
- 公寓名称2
- 地址
- 经理Phone人数
- 租户 1,Phone 数量
- 租户 2,Phone 数量
- 租户 3,Phone 号码
下面是我想在我的 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 中可以做的任何事情,最后您可能会更快乐。