我正在尝试让Xamarin Forms在列表中显示列表。我见过其他人说嵌套在ListView中的ListView不受支持。我试图在ListView中添加一个控件,并将嵌套列表绑定到控件,但每当我尝试绑定它时,它总是会崩溃我的应用程序。
我还发现有些人建议使用分组。分组DOES工作,但我发现的问题是我无法点击分组部分。此外,分组不会实时更新(这是一项要求)。
对于最终结果,我想要一些简单的事情:
下面是我想在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这样做提出任何建议。
答案 0 :(得分:4)
如果我要显示不同项目的列表,我可能会使用TableView而不是ListView。 TableViews不是数据绑定,因此您必须手动构建它们,但它们允许您根据每行中显示的数据灵活地使用不同类型的单元格。
如果您想坚持使用分组ListView,您可以创建一个自定义组标题视图,其中包含可以响应点按手势的按钮(或其他元素)。
答案 1 :(得分:1)
我说跳过XAML并按照您想要的方式在代码中进行布局。
使用StackLayouts和\或Grids,不要依赖半神奇的ListViews数据绑定。好几次我现在开始使用ListView只是为了达到一个点,后来我用一个ForEachLoop去了它。你可以用XAML中的代码做任何事情,最终你可能会更快乐。