GroupDisplayBinding属性导致ListView.ItemTemplate消失

时间:2016-05-04 20:30:20

标签: c# xaml listview xamarin

我试图实现一个非常简单的ListView按ID值分组。在我的页面构造函数中,我有这样的事情:

    public CheckApparatusProgressPage(CheckReport checkReport, Apparatus currentApparatus)
    {
        CurrentCheckReport = checkReport;
        CurrentApparatus = currentApparatus;
        InitializeComponent();
        Title = "Check";
        var itemsSource = App.RestClient.GetCheckReportOutcome(CurrentApparatus.Id).Result;
        GroupedView.ItemsSource = itemsSource;
    }

itemsSourceList<ApparatusCheckStepOutcome>,该类如下所示:

public class ApparatusCheckStepOutcome
{
    [JsonProperty("apparatusCheckStep")]
    public ApparatusCheckStep ApparatusCheckStep { set; get; }
    [JsonProperty("comment")]
    public string Comment { get; set; }
    [JsonProperty("createdAt")]
    public DateTime CreatedAt { get; set; }
    [JsonProperty("id")]
    public int Id { get; set; }
    [JsonProperty("passing")]
    public bool Passing { get; set; }
}

ApparatusCheckStep类看起来像这样:

public class ApparatusCheckStep
{
    [JsonProperty("category")]
    public string Category { get; set; }
    [JsonProperty("createdAt")]
    public DateTime CreatedAt { get; set; }
    [JsonProperty("description")]
    public string Description { get; set; }
    [JsonProperty("id")]
    public int Id { get; set; }
    [JsonProperty("name")]
    public string Name { get; set; }
    [JsonProperty("weight")]
    public int Weight { get; set; }
}

基本上我需要在我的群组标题中显示{Binding ApparatusCheckStep.Id}的值,并在该群组中的子项中显示两个Labels,每个{Binding ApparatusCheckStep.Name}{Binding ApparatusCheckStep.Description}

这是我的XAML视图:

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="HalliganTL.View.CheckApparatusProgressPage">
    <ContentPage.Content>
      <ListView x:Name="GroupedView" IsGroupingEnabled="True" GroupDisplayBinding="{Binding ApparatusCheckStep.Id}">
      <!-- Single Row Customization -->
      <ListView.ItemTemplate>
          <DataTemplate>
            <ViewCell>
              <StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" >
                <Label Text="{Binding ApparatusCheckStep.Name}" FontSize="12" TextColor="White" />
                <Label Text="{Binding ApparatusCheckStep.Description}" FontSize="12" TextColor="White" />
              </StackLayout>
            </ViewCell>
          </DataTemplate>
        </ListView.ItemTemplate>
      </ListView>
    </ContentPage.Content>
</ContentPage>

如果我从IsGroupingEnabled中移除了GroupDisplayBindingListView属性,我就尝试了所有内容并进行了大量搜索。我看到所有&#34;名称 - 说明&#34;没有任何标题的行将它们分组。如果我保留这些属性,我只会看到Id标题行,ListView.ItemTemplate似乎完全被忽略。

我做错了什么?我希望尽可能简单,这就是为什么我要尝试使用XAML完成大部分工作,并且我希望保持这种方式。

1 个答案:

答案 0 :(得分:1)

当你使用分组时,你需要以某种方式拥有你的ItemSource - 你基本上必须有一个包含这些组的IEnumerable,每个组又包含另一个包含每个组数据的IEnumerable

Xamarin有一个sample app来演示如何做到这一点;或者还有另一个很好的例子here