仅在 xaml 中进行 CollectionViewSource 过滤
CollectionViewSource filtering only in xaml
我的文本框向集合提供过滤后的字符串,当我在文本框中输入新值时,我希望根据新的过滤值刷新我的集合。 我不想将过滤逻辑放在我的视图模型或后面的代码中,而只放在 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>
I want to put the filtering logic not in my viewmodel or code behind but only in XAML
不可能。您不能在纯 XAML 中执行此操作。 XAML 是一种 标记 语言。您应该使用编程语言来实现您的逻辑。
给出你当前的设置,你应该在 TextBox
发生变化时在 CollectionViewSource
上调用 Refresh()
,例如在代码隐藏的 TextChanged
事件处理程序中.
如果你想从视图模型中刷新过滤器,你也应该在那里执行实际的过滤。例如,您可以公开视图绑定到的 ICollectionView
。在视图中定义过滤逻辑没有意义,而是尝试从视图模型中刷新它。
我的文本框向集合提供过滤后的字符串,当我在文本框中输入新值时,我希望根据新的过滤值刷新我的集合。 我不想将过滤逻辑放在我的视图模型或后面的代码中,而只放在 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>
I want to put the filtering logic not in my viewmodel or code behind but only in XAML
不可能。您不能在纯 XAML 中执行此操作。 XAML 是一种 标记 语言。您应该使用编程语言来实现您的逻辑。
给出你当前的设置,你应该在 TextBox
发生变化时在 CollectionViewSource
上调用 Refresh()
,例如在代码隐藏的 TextChanged
事件处理程序中.
如果你想从视图模型中刷新过滤器,你也应该在那里执行实际的过滤。例如,您可以公开视图绑定到的 ICollectionView
。在视图中定义过滤逻辑没有意义,而是尝试从视图模型中刷新它。