Как оптимизировать список привязки? - PullRequest
0 голосов
/ 18 июня 2020

Мне нужны ваши фонари, чтобы помочь мне решить проблему. Приведенные ниже коды работают, но я хочу оптимизировать это, потому что я новичок 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 ингредиентов: /

Спасибо за ваши огни

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...