CollectionViewSource не вызывает событие фильтра, когда вызывается refre sh - PullRequest
0 голосов
/ 11 марта 2020

Идея в том, что у меня есть текстовое поле, в котором я набираю строку, эта строка будет фильтровать источник коллекционного вида, который является древовидным. Прикрепленный ниже код:

Сортировка и группировка работают нормально.

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.

До сих пор пробовал:

  1. Я также пытался сохранить свойство LiveFilteringRequested в true в xaml и также пытался добавить CollectionViewType, но ничего из этого не работает.
  2. Фильтр триггера на CollectionViewSource , это решение требует, чтобы я держал материал в viewmodel, а не в xaml, что является проблемой для меня.

Было бы полезно Если вы можете порекомендовать любое решение на основе mvvm для вышеуказанной проблемы.

1 Ответ

0 голосов
/ 11 марта 2020

Вызовите Refresh() на CollectionViewSource с именем "SystemCollection" в представлении или внедрите ICollectionView или любой другой тип коллекции источников в модели представления и повторно оттуда sh оттуда.

Добавление LiveFilteringProperties также должно работать при условии, что сгенерированный CollectionView реализует интерфейс ICollectionViewLiveShaping.

...