У меня есть панель поиска, которая показывает пустой список, когда я что-то пишу в нем, десериализацию в ItemPage и SearchBar_TextChanged. Весь файл выглядит следующим образом:
using System.ComponentModel;
using Xamarin.Forms;
using Diabetics.Models;
using Diabetics.ViewModels;
using System.Linq;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.Threading.Tasks;
using Plugin.Connectivity;
using System.Net.Http;
using Newtonsoft.Json;
using System;
using System.Windows.Input;
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;
});
}
private void SearchBar_TextChanged(object sender, TextChangedEventArgs e)
{
if (string.IsNullOrWhiteSpace(e.NewTextValue))
{
ItemsListView.ItemsSource = itemlist.ToList();
}
else
{
ItemsListView.ItemsSource = itemlist.Where(x => x.Nazwa.Contains(e.NewTextValue)).ToList();
}
}
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));
ItemsListView.SelectedItem = null;
}
private async void ToolbarItem_ClickedAsync(object sender, EventArgs e)
{
await Navigation.PushAsync(new FullScreenScanning());
}
private 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;
var itemlist = JsonConvert.DeserializeObject<ObservableCollection<Item>>(result);
ItemsListView.ItemsSource = itemlist;
}
}
}
Моя поисковая панель в XAML выглядит следующим образом <SearchBar Text="" Placeholder="Wyszukaj..." TextChanged="SearchBar_TextChanged" x:Name="searchbarnew"/>
Я хочу, чтобы он отображал элементы с таким же Nazwa как e.NewTextValue mine Json File выглядит следующим образом:
[
{
"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
},
{
"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
}
]
Он должен отображать элементы с тем же именем, что и e.NewTextValue, например, если мы ищем Fitness2 , он должен показывать только один элемент списка. Теперь он пуст, и я не ошибаюсь.