GroupDisplayBinding属性会导致ListView.ItemTemplate消失



我正在尝试实现一个由Id值分组的非常简单的ListView。在我的页面构造函数中,我有这样的东西:

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

itemsSource是一个List<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>

我尝试了所有的方法,搜索了很多,如果我从ListView中删除IsGroupingEnabledGroupDisplayBinding属性,我会看到所有的"名称-描述"行,而没有任何标题对它们进行分组。如果我保留这些属性,我只看到Id头行,而ListView.ItemTemplate似乎被完全忽略了。

我做错了什么?我想让它尽可能简单,这就是为什么我试图用XAML做大部分工作,我想保持这种方式。

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

Xamarin有一个示例应用程序来演示如何做到这一点;或者还有另一个很好的例子这里(死链接,这里是存档版本)

最新更新