我试图实现一个非常简单的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;
}
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>
如果我从IsGroupingEnabled
中移除了GroupDisplayBinding
和ListView
属性,我就尝试了所有内容并进行了大量搜索。我看到所有&#34;名称 - 说明&#34;没有任何标题的行将它们分组。如果我保留这些属性,我只会看到Id标题行,ListView.ItemTemplate
似乎完全被忽略。
我做错了什么?我希望尽可能简单,这就是为什么我要尝试使用XAML完成大部分工作,并且我希望保持这种方式。
答案 0 :(得分:1)
当你使用分组时,你需要以某种方式拥有你的ItemSource - 你基本上必须有一个包含这些组的IEnumerable,每个组又包含另一个包含每个组数据的IEnumerable
Xamarin有一个sample app来演示如何做到这一点;或者还有另一个很好的例子here