@Zulkund

Как создать фильтрацию в привязанной коллекции в WPF?

Добрый день! Столкнулся с такой проблемой. В моем проекте к ComboBox'у привязана коллекция своего класса "Person".
Как можно отключить некоторые элементы коллекции при нажатии на RadioButton?
  • Вопрос задан
  • 1014 просмотров
Решения вопроса 2
k1lex
@k1lex
Программист торг. сети. C# (WPF, WinForms), T-SQL
Могу предложить решение, которое сам найдя на просторах сети начал использовать и остался доволен.
1. Заводим коллекцию, которая будет у нас источником
public ObservableCollection<Person>  FilteredCollection
        {
            get
            {
   return  new ObservableCollection<Person>(PersonCollection.Where(i => FilteredCheck(i)));
            }
        }

2.
public bool FilteredCheck(DemandHead item)
        {
            bool Accept=true;
// организовываем проверку как вашей душе удобно
}

// И дальше при изменении фильтра оповещаем View об изменении данных
        public bool IsFilterEnabled
        {
            get
            {
                return _IsFilterEnabled;
            }

            set
            {
                _IsFilterEnabled = value;
                base.OnPropertyChanged("IsFilterEnabled");
                base.OnPropertyChanged("FilteredCollection");

            }
        }
Ответ написан
Комментировать
phoenixbk
@phoenixbk
Есть ещё вариант использовать CollectionViewSource:
CollectionViewSource _viewSource = new CollectionViewSource();
_viewSource.Source = _items;
_viewSource.Filter += (s, e) =>
              {
                  SomeItem item = e.Item as SomeItem;
                  bool accepted;
                  //проверяем наши условия. true - объект отобразится, false - не отобразится
                  e.Accepted = accepted;
              };

Чтобы обновить список элементов используем:
_viewSource.View.Refresh();
После этого для каждого элемента из _items вызовется событие Filter.
Соответственно в ComboBox.ItemsSource биндим _viewSource.View. Таким образом в ComboBox не придется каждый раз вручную вставлять новую коллекцию.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы