Вы можете внести некоторые изменения, чтобы включить группировку:
XAML должен быть:
<ListView
x:Name="listView"
IsGroupingEnabled="True"
HasUnevenRows="True">
<ListView.GroupHeaderTemplate>
<DataTemplate>
<ViewCell Height="45">
<Grid Padding="10" BackgroundColor="WhiteSmoke">
<Label FontSize="18">
<Label.FormattedText>
<FormattedString>
<Span Text="{Binding Name}"/>
<Span Text=", "/>
<Span Text="{Binding Price}"/>
</FormattedString>
</Label.FormattedText>
</Label>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.GroupHeaderTemplate>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell Height="40">
<Grid Padding="10" BackgroundColor="White">
<Label FontSize="15">
<Label.FormattedText>
<FormattedString>
<Span Text="{Binding OptionName}"/>
<Span Text=", "/>
<Span Text="{Binding OptionPrice}"/>
</FormattedString>
</Label.FormattedText>
</Label>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Модель продукта должна быть:
Запишите, что я унаследовал Product
с List<ProductOptions>
public class Product : List<ProductOption>
{
public string Name { get; set; }
public float Price { get; set; }
public List<ProductOption> ProductOptions => this;
public Product(string name, float price, params ProductOption[] productOption)
{
Name = name;
Price = price;
foreach (ProductOption p in productOption)
{
ProductOptions.Add(p);
}
}
}
Когда я попробовал следующие данные:
var stronaInternetowa = new Product("Webpage", 100f, new ProductOption("Option1", 10f), new ProductOption("Option2", 20f), new ProductOption("Option3", 30f));
var sklepInternetowy = new Product("Shop", 100f, new ProductOption("Option1", 10f), new ProductOption("Option2", 20f));
Я получил следующий результат: