Фильтр триггеров на CollectionViewSource

Я работаю над настольным приложением 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 изменяется?

Большое спасибо

44
задан Drew Noakes 26 April 2015 в 21:39
поделиться