Я работаю над настольным приложением WPF, используя шаблон MVVM.
Я пытаюсь отфильтровать некоторые элементы из ListView на основе текста, набранного в TextBox. Я хочу, чтобы элементы ListView были отфильтрованы, когда я изменяю текст.
Я хочу знать, как запускать фильтр при изменении текста фильтра.
ListView привязывается к CollectionViewSource, который привязывается к ObservableCollection в моей ViewModel. TextBox для текста фильтра привязывается к строке в ViewModel с UpdateSourceTrigger=PropertyChanged, как и должно быть.
<CollectionViewSource x:Key="ProjectsCollection"
Source="{Binding Path=AllProjects}"
Filter="CollectionViewSource_Filter" />
<TextBox Text="{Binding Path=FilterText, UpdateSourceTrigger=PropertyChanged}" />
<ListView DataContext="{StaticResource ProjectsCollection}"
ItemsSource="{Binding}" />
Filter="CollectionViewSource_Filter" ссылается на обработчик события в коде, который просто вызывает метод фильтра в ViewModel.
Фильтрация выполняется при изменении значения FilterText - средство настройки для свойства FilterText вызывает метод FilterList, который выполняет итерацию по ObservableCollection в моей модели ViewModel и устанавливает свойство boolean FilteredOut для каждого элемента ViewModel.
Я знаю, что свойство FilteredOut обновляется при изменении текста фильтра, но List не обновляется. Событие фильтра CollectionViewSource запускается только при перезагрузке UserControl путем перехода от него и обратно.
Я попытался позвонить OnPropertyChanged("AllProjects") после обновления информации о фильтре, но это не решило мою проблему.
( "AllProjects" - это свойство ObservableCollection на моей модели ViewModel, с которой связывается CollectionViewSource.)
Как я могу заставить CollectionViewSource переделать себя, когда изменится значение FilterText TextBox?
Большое спасибо