Отображение элемента из списка Json при сканировании QR-кода - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть список в JSON, и я десериализую его. Это выглядит так:

[
  {
    "Nazwa": "Czekolada mleczna Sport & Fitness",
    "Opis": "Przykładowy opis produktu Czekolada mleczna Sport & Fitness",
    "Zdjecie": "https://www.friars.co.uk/images/lindt-gold-milk-chocolate-bar-p504-7263_image.jpg",
    "WW": 0.28,
    "WBT": 0.22,
    "Energia": 31.8125,
    "Tluszcz": 2.19375,
    "Weglowodany": 3.225,
    "Blonnik": 0.11875,
    "Bialko": 0.45625,
    "Zelazo": 0.1875,
    "Wapn": 15.5,
    "Code": "czokolate_1"
  },
  {
    "Nazwa": "Czekolada mleczna Sport & Fitness2",
    "Opis": "Przykładowy opis produktu Czekolada mleczna Sport & Fitness2",
    "Zdjecie": "https://vaya.in/recipes/wp-content/uploads/2018/02/Milk-Chocolate-1.jpg",
    "WW": 0.16,
    "WBT": 0.21,
    "Energia": 28.5625,
    "Tluszcz": 2.19375,
    "Weglowodany": 2.94375,
    "Blonnik": 0.4875,
    "Bialko": 0.34375,
    "Zelazo": 0.8125,
    "Wapn": 0,
    "Code": "czokolate_2"
  }
]

Я использую ZXing. Net .Mobile.Forms для сканирования QR-кода. Для обработки результата у меня есть этот код:

public Item item { get; set; }
public void Handle_OnScanResult(Result result)
        {
            Device.BeginInvokeOnMainThread(async () =>
            {
                string code = item.Code;
                string wynik = result.Text;
                if (wynik == code) {
                    await Navigation.PushAsync(new ItemDetailPage(item.Nazwa, item.Opis, item.Zdjecie, item.WW, item.WBT, item.Energia, item.Tluszcz, item.Weglowodany, item.Blonnik, item.Bialko, item.Zelazo, item.Wapn, item.Code));
                    await DisplayAlert("Wyszukaj?", item.Nazwa, "OK");
                }
            });
        }

item.Code - это значение, назначенное элементу в списке JSON, и QR-код также имеет это значение, если я использую

Device.BeginInvokeOnMainThread(async () =>
            {
                string wynik = result.Text;
                    await DisplayAlert("Wyszukaj?", wynik, "OK");
                }
            });

Показывает это значение «код» . Я хочу, чтобы он показывал страницу сведений со всеми значениями (у меня она есть, но только когда вы нажимаете на элемент в списке, он отправляет все значения этого элемента в ItemDetailPage) ItemPage

async void OnItemSelected(object sender, SelectedItemChangedEventArgs args)
        {
            if (!(args.SelectedItem is Item item))
                return;

            await Navigation.PushAsync(new ItemDetailPage(item.Nazwa, item.Opis, item.Zdjecie, item.WW, item.WBT, item.Energia, item.Tluszcz, item.Weglowodany, item.Blonnik, item.Bialko, item.Zelazo, item.Wapn, item.Code));

            // Manually deselect item.
            ItemsListView.SelectedItem = null;
        }

ItemDetailPage

public ItemDetailPage(string Nazwa, string Opis, string Zdjecie, float WW, float WBT, float Energia, float Tluszcz, float Weglowodany, float Blonnik, float Bialko, float Zelazo, float Wapn, string Code)
        {
            InitializeComponent();

            tytul.Title = Nazwa;
            nazwa.Text = Nazwa;
            opis.Text = Opis;
            foto.Source = ImageSource.FromUri(new Uri(Zdjecie));
            ww_item.Text = WW.ToString();
            wbt_item.Text = WBT.ToString();
            energia_item.Text = Energia.ToString();
            tluszcz_item.Text = Tluszcz.ToString();
            weglowodany_item.Text = Weglowodany.ToString();
            blonnik_item.Text = Blonnik.ToString();
            bialko_item.Text = Bialko.ToString();
            zelazo_item.Text = Zelazo.ToString();
            wapn_item.Text = Wapn.ToString();
        }

Я хочу, чтобы он переместился в ItemDetailPage с деталями элемента, которые имеют то же значение "кода", что и QR-код, ИЛИ я хочу, чтобы элемент ItemPage отображался только с теми элементами, которые имеют "код" "значение в виде QR-кода. Я пытался использовать что-то вроде панели поиска, но не могу заставить его работать с JSON list

1 Ответ

0 голосов
/ 06 февраля 2020

для выбора одного элемента из списка (предположим, items - это List<Item>)

using System.Linq;

var item = items.FirstOrDefault(x => x.Code == result.Text);

для выбора всех совпадений

var allitems = items.Where(x => x.Code == result.Text).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...