我正在尝试实现一个由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
中删除IsGroupingEnabled
和GroupDisplayBinding
属性,我会看到所有的"名称-描述"行,而没有任何标题对它们进行分组。如果我保留这些属性,我只看到Id头行,而ListView.ItemTemplate
似乎被完全忽略了。
我做错了什么?我想让它尽可能简单,这就是为什么我试图用XAML做大部分工作,我想保持这种方式。
当你使用分组时,你需要以某种方式拥有你的ItemSource——你基本上必须有一个包含组的IEnumerable,每个组又包含另一个包含每个组数据的IEnumarable
Xamarin有一个示例应用程序来演示如何做到这一点;或者还有另一个很好的例子这里(死链接,这里是存档版本)