Я пытаюсь показать элементы в ListView, которые имеют точное имя в виде QR-кода. Я использую ZXing и список показан из десериализации файла JSON на сайте. Мой код, который обрабатывает результат QR-кода:
public void Handle_OnScanResult(Result result)
{
string wynik = result.Text;
ItemPage P = new ItemPage();
Application.Current.MainPage.Navigation.PopModalAsync();
P.Receive_result(wynik);
}
Он принимает результат. Текст как wynik , закрывает окно с камерой и отправляет его на этот код:
public void Receive_result(string wynik)
{
ItemsListView.ItemsSource = itemlist.Where(x => x.Nazwa.Equals(wynik));
}
Когда он читает QR-код, значение сохраняется и отправляется в Receive_result, но список не обновляется. Весь код, который отвечает за отображение ListView и десериализацию объекта:
using System.ComponentModel;
using Xamarin.Forms;
using Diabetics.Models;
using System.Linq;
using System.Collections.ObjectModel;
using System.Net.Http;
using Newtonsoft.Json;
using System;
namespace Diabetics.Views
{
[DesignTimeVisible(false)]
public partial class ItemPage : ContentPage
{
public ObservableCollection<Item> itemlist = new ObservableCollection<Item>();
public ItemPage()
{
InitializeComponent();
LoadAll();
ItemsListView.RefreshCommand = new Command(() => {
LoadAll();
ItemsListView.IsRefreshing = false;
});
}
//code to receive value wynik and update list
public void Receive_result(string wynik)
{
ItemsListView.ItemsSource = itemlist.Where(x => x.Nazwa.Equals(wynik));
}
//searchbar
public void SearchBar_TextChanged(object sender, TextChangedEventArgs e)
{
if (string.IsNullOrWhiteSpace(e.NewTextValue))
{
ItemsListView.ItemsSource = itemlist;
}
else
{
ItemsListView.ItemsSource = itemlist.Where(x => x.Nazwa.Contains(e.NewTextValue));
}
}
//On click to show item details
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));
ItemsListView.SelectedItem = null;
}
//Button to show camera
private async void ToolbarItem_ClickedAsync(object sender, EventArgs e)
{
await Navigation.PushModalAsync(new FullScreenScanning());
}
//Json Deserialization
public async void LoadAll()
{
waitActivityIndicator.IsRunning = true;
waitActivityIndicator.IsVisible = true;
string result = string.Empty;
try
{
HttpClient Klient = new HttpClient();
Klient.BaseAddress = new Uri("https://next.json-generator.com");
string url = string.Format("/api/json/get/4yvwrz2bd");
var response = await Klient.GetAsync(url);
result = response.Content.ReadAsStringAsync().Result;
}
catch (Exception ex)
{
await DisplayAlert("Error", string.Format("Musisz być podłączony do internetu", ex.Message), "OK");
waitActivityIndicator.IsRunning = false;
waitActivityIndicator.IsVisible = false;
}
waitActivityIndicator.IsRunning = false;
waitActivityIndicator.IsVisible = false;
itemlist = JsonConvert.DeserializeObject<ObservableCollection<Item>>(result);
ItemsListView.ItemsSource = itemlist;
}
}
}