несколько CollectionViews одной и той же ObservableCollection в WPF C # - PullRequest
1 голос
/ 04 июля 2019

У меня есть приложение со списком покупок.Мои товары имеют некоторые свойства, такие как string Name, bool InList.И они реализуют вещь INotifyPropertyChanged.Пока это работает.

Я получаю элементы с сервера и сохраняю их в ObservableCollection<Item> AllItemsInDataBase.

. В пользовательском интерфейсе у меня есть

  1. списоксо всеми Предметами (для целей отладки)
  2. a Список с предметами, уже находящимися в Списке покупок (item.InList == true)
  3. TextBox, где пользователи могут вводить имена, и они "предлагаются"с элементами с похожим именем.

Для полного списка я просто создаю ListBox и прикрепляю ItemsSource к AllItemsInDataBase, он работает как шарм.Они появляются по мере загрузки и все круто

Теперь для двух других списков (элементов в списке покупок и элементов, соответствующих поисковому слову) я создал ListCollectionView, прикрепил его к основному списку и добавил фильтр.,Вот так:

public ListCollectionView ItemsInList;
ItemsInList = CollectionViewSource.GetDefaultView(AllItemsInDataBase) as ListCollectionView;
ItemsInList.Filter = i =>  (i as Item).InList ;

//fill sources for ListBox in the UI
shoppingListLB.ItemsSource = ItemsInList;
allItemsLB.ItemsSource = AllItemsInDataBase;   

И моя проблема в том, что ОБА отфильтрован список!

Как создать разные одновременные представления для одной и той же коллекции и отображать их одновременно?

PS: Как только он заработает, я создам другое представление с элементами, соответствующими полю поиска, поэтому мне нужно три фильтра одновременно

1 Ответ

1 голос
/ 04 июля 2019

Всякий раз, когда вы пытаетесь выполнить привязку к ObservableCollection<T>, вы фактически всегда привязываетесь к автоматически сгенерированному представлению, а не к фактической исходной коллекции. Все коллекции имеют вид по умолчанию, который используется всеми привязками к коллекции. Вот почему оба элемента управления фильтруются.

Вы можете решить эту проблему, создав ListCollectionView и связавшись с ним вместо ObservableCollection<Item>:

Items = new ListCollectionView(AllItemsInDataBase);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...