Мне нужно разработать код, отображающий все продукты вместе с их параметрами, чтобы их можно было в конечном итоге проверить с помощью ползунков для последующего расчета цены.
Код для MainPage с некоторыми фиктивными данными для тестирования
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
List<Product> products = new List<Product>();
var stronaInternetowa = new Product("Webpage", 100f, new ProductOption("Option1", 10f));
var sklepInternetowy = new Product("Shop", 100f, new ProductOption("Option1", 10f));
products.Add(stronaInternetowa);
products.Add(sklepInternetowy);
listView.ItemsSource = products;
}
}
Класс ProductOption для хранения данных о параметрах продукта.
class ProductOption
{
public string OptionName { get; private set; }
public float OptionPrice { get; private set; }
public ProductOption(string name, float price)
{
OptionName = name;
OptionPrice = price;
}
}
XAML MainPage с примером ListView того, что я хочу получить
<ListView x:Name = "listView" RowHeight = "100">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text = "{Binding Name}"></Label>
<!-- Here i would like to display all of the ProductOptions in the list along with Sliders -->
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Класс продукта.
class Product
{
public string Name { get; set; }
public float Price { get; set; }
public List<ProductOption> ProductOptions { get; private set; } = new List<ProductOption>();
public Product(string name, float price,params ProductOption[] productOption)
{
Name = name;
Price = price;
foreach(ProductOption p in productOption)
{
ProductOptions.Add(p);
}
}
}
Что я пробовал до сих пор:





Вы можете внести некоторые изменения, чтобы включить группировку:
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));
Я получаю следующий результат: