调用刷新时 CollectionViewSource 不触发过滤器事件

CollectionViewSource is not triggering the filter event when refresh is called

我的想法是,我有一个文本框,我可以在其中键入一个字符串,该字符串将过滤作为树视图的 collectionviewsource。附上以下代码:

排序和分组工作正常。

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

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.Refresh() 未触发 collectionviewsource 上的过滤器事件。我检查过过滤事件仅在加载用户控件时触发。

目前已尝试:

  1. 我也尝试过将 LiveFilteringRequested 属性 设置为 true 在 xaml 中,还尝试添加 CollectionViewType,但是 none 正在工作中。
  2. Trigger Filter on CollectionViewSource, 这个解决方案要求我将东西保存在视图模型中而不是 xaml 这对我来说是个问题。

如果您能为上述问题推荐任何基于 mvvm 的解决方案,将会很有帮助。

在视图中调用名为 "SystemCollection" 的 CollectionViewSource 上的 Refresh() 或在视图模型中实现 ICollectionView 或任何其他类型的源集合并刷新从那里开始。

如果生成的 CollectionView 实现了 ICollectionViewLiveShaping 接口,添加 LiveFilteringProperties 也应该有效。