Идея в том, что у меня есть текстовое поле, в котором я набираю строку, эта строка будет фильтровать источник коллекционного вида, который является древовидным. Прикрепленный ниже код:
Сортировка и группировка работают нормально.
View.xaml
<TreeView x:Name="SystemsTreeView" ItemsSource="{Binding Source={StaticResource SystemCollection}, Path=Groups}">
<CollectionViewSource x:Key="SystemCollection" Source="{Binding SystemsList}" Filter="SystemCollectionChangeFilter" IsLiveFilteringRequested="True" >
<CollectionViewSource.LiveFilteringProperties>
<clr:String>SystemName</clr:String>
<clr:String>Version</clr:String>
</CollectionViewSource.LiveFilteringProperties>
<!--Sorting of Systems-->
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="SystemName"/>
<scm:SortDescription PropertyName="Version" Direction="Descending"/>
</CollectionViewSource.SortDescriptions>
<!--Grouping of Systems-->
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="SystemName" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
SystemCollectionChangeFilter вызывает метод для viewmodel для фильтрации.
ViewModel
ICollectionView viewSource = CollectionViewSource.GetDefaultView(SystemsList); //in the constructor
private string _systemNameFilter;
public string SystemNameFilter //Attached to Textbox (for filtering)
{
get { return _systemNameFilter; }
set
{
if (_systemNameFilter != value)
{
_systemNameFilter = value;
viewSource.Refresh(); //This is not triggering the filtering event.
NotifyPropertyChanged();
}
}
}
viewSource.Refre sh () не вызывает событие фильтра в collectionviewsource, Я проверил, что событие фильтрации запускается только при загрузке usercontrol.
До сих пор пробовал:
- Я также пытался сохранить свойство LiveFilteringRequested в true в xaml и также пытался добавить CollectionViewType, но ничего из этого не работает.
- Фильтр триггера на CollectionViewSource , это решение требует, чтобы я держал материал в viewmodel, а не в xaml, что является проблемой для меня.
Было бы полезно Если вы можете порекомендовать любое решение на основе mvvm для вышеуказанной проблемы.