Мне нужны ваши фонари, чтобы помочь мне решить проблему. Приведенные ниже коды работают, но я хочу оптимизировать это, потому что я новичок ie в кодировании cs, и я знаю, что это не лучший способ, даже если он работает ..
У меня есть PageModel с некоторыми строками
PageModel.cs
namespace myapp
{
public class Ingredient
{
public string IngredientName { get; set; }
public string Quantity { get; set; }
public string Detail { get; set; }
}
}
Затем страница просмотра с привязками
Page.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"
xmlns:local="clr-namespace:myapp »
x:Class=« app.Views.Page>
<ContentPage.Content>
<StackLayout>
<ListView
ItemsSource="{Binding IngredientList}"
HasUnevenRows="true"
SeparatorVisibility="None"
ItemTapped="OnItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Label Text="{Binding IngredientName}" />
<Label Text="{Binding Detail}" />
<Label Text="{Binding Quantity}"/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage.Content>
</ContentPage>
Список отображается в соответствии со строкой, передаваемой в конструктор (PizzaName). Итак, у вас есть список различных ингредиентов (в случае)
Page.cs
namespace myapp.Views
{
public partial class Page : ContentPage
{
public List<Ingredient> IngredientList { get; set; }
public Page(string PizzaName)
{
InitializeComponent();
switch ( PizzaName )
{
case « Pepperoni »:
IngredientList = new List<Ingredient>
{
new Ingredient { IngredientName = « Tomato », Quantity = "10 gr", Detail = "Tomato detail" },
new Ingredient { IngredientName = « Mushrooms », Quantity = "20 gr", Detail = "Mushrooms detail" },
new Ingredient { IngredientName = « Pepper », Quantity = " 5 gr ", Detail = " Pepper detail" }
};
break;
case « Regina »:
IngredientList = new List<Ingredient>
{
new Ingredient { IngredientName = « Butter », Quantity = "10 gr ", Detail = "Butter detail" },
new Ingredient { IngredientName = « Mushrooms », Quantity = "10 gr", Detail = "Mushrooms detail" },
new Ingredient { IngredientName = « Flour », Quantity = "5 gr", Detail = "Flour detail" }
};
break;
}
BindingContext = this;
}
private async void OnItemSelected(Object sender, ItemTappedEventArgs e)
{
var mydetails = e.Item as Ingredient;
await Navigation.PushAsync(new DetailPage(mydetails.IngredientName, mydetails.Quantity, mydetails.Detail));
}
}
}
Поэтому я хочу создать список в отдельном файле (возможно, на странице ViewModel), который будет содержать глобальный список всех ингредиентов без строки количества и добавить строку идентификатора.
Что-то вроде этого ViewModel.cs
GlobalIngredientList = new List<Ingredient>
{
new Ingredient { ID = " 1 ", IngredientName = "Tomato", Detail = "Tomato detail" },
new Ingredient { ID = "2", IngredientName = "Mushrooms", Detail = "Mushrooms detail" },
new Ingredient { ID = "3", IngredientName = " Pepper ", Detail = "Pepper detail " },
new Ingredient { ID = " 4 ", IngredientName = " Butter ", Detail = " Butter detail " },
new Ingredient {ID = " 5 ", IngredientName = " Mushrooms ", Detail = "Mushrooms detail" },
new Ingredient { ID = " 6 ", IngredientName = " Flour ", Detail = " Flour detail " }
};
Затем в моем Page.cs я хочу вызвать новый список, но установить только идентификатор GlobalList и количество
Page.cs
namespace myapp.Views
{
public partial class Page : ContentPage
{
public List<Ingredient> IngredientList { get; set; }
public Page(string PizzaName)
{
InitializeComponent();
switch ( PizzaName )
{
case « Pepperoni »:
IngredientList = new List<Ingredient>
{
new Ingredient { ID = " 1 ", Quantity = "10 gr " },
new Ingredient { ID = " 3", Quantity = "20 gr" },
new Ingredient { ID = " 5 ", , Quantity = "5 gr " }
};
break;
case « Regina »:
IngredientList = new List<Ingredient>
{
new Ingredient { ID = " 6 ", Quantity = "10 gr " },
new Ingredient { ID = " 3 ", Quantity = " 20 gr " },
new Ingredient { ID =" 2 ", , Quantity = " 5 gr " }
};
break;
}
BindingContext = this;
}
private async void OnItemSelected(Object sender, ItemTappedEventArgs e)
{
var mydetails = e.Item as Ingredient;
await Navigation.PushAsync(new DetailPage(mydetails.IngredientName, mydetails.Quantity, mydetails.Detail));
}
}
}
Наконец, я хочу избежать повторения названия ингредиентов и деталей в cs и по-прежнему попаду на мою страницу xaml IngredientName, Quantity и Detail .. и поскольку мой глобальный список может содержать более 100 ингредиентов: /
Спасибо за ваши огни