Wpf CollectionViewSource仅在xaml中过滤

Wpf CollectionViewSource仅在xaml中过滤,wpf,mvvm,collectionviewsource,Wpf,Mvvm,Collectionviewsource,我的文本框向集合提供筛选字符串,当我在文本框中输入新值时,我希望集合按照新的筛选值刷新。我不想将过滤逻辑放在viewmodel或代码中,而只想放在XAML中。代码附在下面。排序和分组工作正常。我已经检查了这个答案:,它几乎是做的东西,但缺乏当涉及到刷新收集,因此,我创造了一个新的问题,因为我找不到答案 我有没有办法做到这一点 <TreeView x:Name="SystemsTreeView" ItemsSource="{Binding Source={StaticResource

我的文本框向集合提供筛选字符串,当我在文本框中输入新值时,我希望集合按照新的筛选值刷新。我不想将过滤逻辑放在viewmodel或代码中,而只想放在XAML中。代码附在下面。排序和分组工作正常。我已经检查了这个答案:,它几乎是做的东西,但缺乏当涉及到刷新收集,因此,我创造了一个新的问题,因为我找不到答案

我有没有办法做到这一点

   <TreeView x:Name="SystemsTreeView" ItemsSource="{Binding Source={StaticResource SystemCollection}, Path=Groups}">

     <CollectionViewSource x:Key="SystemCollection" Source="{Binding SystemsList}" Filter="{MyLogic}">   
        <!--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>
我不想把过滤逻辑放在viewmodel或代码中,而只放在XAML中

不可能。在纯XAML中不能这样做。XAML是一种标记语言。您应该用编程语言实现您的逻辑

在当前设置中,只要文本框发生更改,就应该在CollectionViewSource上调用Refresh,例如在代码隐藏中的TextChanged事件处理程序中


如果要从视图模型中刷新过滤器,还应在那里执行实际过滤。例如,您可以公开视图绑定到的ICollectionView。在视图中定义过滤逻辑是没有意义的,但尝试从视图模型中刷新它。

系统列表是什么类型?为什么要使用Source={StaticResource SystemCollection}?SystemsList是一个observableCollection,我使用StaticResource来使用collectionviewsource进行排序、分组和筛选,如果可行的话: