2015-10-19 69 views
6

我试图让Xamarin窗体在列表中显示一个列表。我见过其他人说不支持嵌套在ListView中的ListView。我试图在ListView中添加一个控件,并将嵌套列表绑定到控件,但是每当我尝试绑定它时,总会崩溃我的应用程序。我也发现有人建议使用分组。将DOES分组工作,但是我发现的问题是我无法点击分组部分。此外,分组不会实时更新(这是一项要求)。如何显示Xamarin表单中的项目的嵌套列表?

对于最终的结果,我想是这样简单的事情:

  • ApartmentName1
  • 地址
  • 经理电话号码
  •          租户1,电话号码
  •          租客2,电话号码
  •          租户3,电话号码
  • ApartmentName2
  • 地址
  • 经理电话号码
  •          租户1,电话号码
  •          租客2,电话号码
  •          租户3,电话号码

下面是一个例子对象,我想在我的Xamarin窗体项目中显示。

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做到这一点,我愿意接受任何建议。

回答

1

我想说,跳过XAML,只是把它放在代码中想要的方式。

使用StackLayouts和\或网格,不要依赖半神奇的ListViews Databinding。好几次,现在我已经开始使用ListView,后来才发现它使用ForEachLoop。您可以在代码中做任何事情,您可以在XAML中做任何事情,最终可能会更快乐。

+1

是它的答案或建议吗? –

+1

我不相信。用XAML编写用户界面是最好的方法,如果你抓到一些书会看到建议。 –

+0

阅读书籍队友。它不会改变它。最后直到有所见即所得的编辑器XAML没有优于纯代码的优势。 1.执行速度较慢。 2.开发没有调试器和小智能。假设你保持你的代码清洁,那么它的代码就更详细了。像这样的情况一直出现,如果OP使用C#开始,这永远不会是一个问题。 – David

4

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

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

+0

问题明确,但它是UWP(或WPF)xaml的气味。我们也有同样不好的经历。我没有时间丢失尝试没有XAML,我应该尝试手动绑定子列表视图? –