Я работаю над настольным приложением 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 обновляется при изменении текста фильтра, но список не обновляется. Событие фильтра CollectionViewSource
запускается только тогда, когда я перезагружаю UserControl, переключаясь с него и обратно.
Я попытался вызвать OnPropertyChanged ("AllProjects")
после обновления отфильтровать информацию, но это не решило мою проблему.
(«AllProjects» - это свойство ObservableCollection
на моей модели ViewModel, к которому привязывается CollectionViewSource
.)
Как я могу заставить CollectionViewSource
повторно фильтровать себя, когда значение FilterText TextBox
изменяется?
Большое спасибо