Здравствуйте, суть такова: делаю фильтрацию CollectionView, который получает данные из ObservableCollection. Логика располагается во VIewModel классе. Данные для ObservableCollection получаю из HTTP запроса, после чего присваиваю полученные данные полю Products, к которому и обращается CollectionView.
public ObservableCollection<Product> Prodyct = httpClient.GetFromJsonAsync<ObservableCollection<Product>>("http://10.0.2.2:5192/api/Product").Result;
public ObservableCollection<Product> Products
{
get
{
var temp = Prodyct;
return temp;
}
set
{
if (Products != value)
{
Products = value;
OnPropertyChanged();
}
}
}
Реализовал также полурабочий(одноразовый) поиск по тексту, на основе которого также сделал и тестовую фильтрацию:
private void OnChanged(object obj)
{
List<Product> TempFiltered;
TempFiltered = Prodyct.Where(contact => contact.Title.Contains(obj.ToString(), StringComparison.OrdinalIgnoreCase)).ToList();
foreach (var item in Prodyct.ToList())
{
if (!TempFiltered.Contains(item))
{
Products.Remove(item);
}
else
{
if (!Products.Contains(item))
{
Products.Add(item);
}
}
}
OnPropertyChanged();
}
Особенностью реализации фильтрации является то, что сначала происходит вызов BottomSheet, который также привязан к этой же ViewModel(мне показалось, что так будет более удобно), после чего в этом окне происходит выбор параметра по которому необходимо отфильтровать коллекцию(название производителя) и при нажатии кнопки вызывается команда, работающая также как и метод поиска по тексту, представленный выше. Но если поиск хоть и работает один раз, но все же работает, то фильтрация отказывается обновлять коллекцию, т.е. все работает: из Products элементы удаляются, но CollectionView не обновляется совсем.
private void Filtration(object obj)//Объект получается из XAML BottomSheet'a
{
List<Product> TempFiltered;
var searchM = obj as Manufacturer;
TempFiltered = Prodyct.Where(c => c.manufacturer.Contains(searchM.Title, StringComparison.OrdinalIgnoreCase)).ToList();
foreach (var item in Prodyct.ToList())
{
if (!TempFiltered.Contains(item))
{
Products.Remove(item);
}
else
{
if (!Products.Contains(item))
{
Products.Add(item);
}
}
}
OnPropertyChanged();
}
С паттерном MVVM работаю впервые, поэтому не уверен в правильности объявления полей, а также поиска и фильтрации:) Буду очень благодарен, если подскажите как починить/сделать правильно поиск и фильтрацию.