调用刷新时 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 上的过滤器事件。我检查过过滤事件仅在加载用户控件时触发。
目前已尝试:
- 我也尝试过将 LiveFilteringRequested 属性 设置为 true
在 xaml 中,还尝试添加 CollectionViewType,但是 none
正在工作中。
- Trigger Filter on CollectionViewSource,
这个解决方案要求我将东西保存在视图模型中而不是
xaml 这对我来说是个问题。
如果您能为上述问题推荐任何基于 mvvm 的解决方案,将会很有帮助。
在视图中调用名为 "SystemCollection" 的 CollectionViewSource
上的 Refresh()
或在视图模型中实现 ICollectionView
或任何其他类型的源集合并刷新从那里开始。
如果生成的 CollectionView
实现了 ICollectionViewLiveShaping
接口,添加 LiveFilteringProperties
也应该有效。
我的想法是,我有一个文本框,我可以在其中键入一个字符串,该字符串将过滤作为树视图的 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 上的过滤器事件。我检查过过滤事件仅在加载用户控件时触发。
目前已尝试:
- 我也尝试过将 LiveFilteringRequested 属性 设置为 true 在 xaml 中,还尝试添加 CollectionViewType,但是 none 正在工作中。
- Trigger Filter on CollectionViewSource, 这个解决方案要求我将东西保存在视图模型中而不是 xaml 这对我来说是个问题。
如果您能为上述问题推荐任何基于 mvvm 的解决方案,将会很有帮助。
在视图中调用名为 "SystemCollection" 的 CollectionViewSource
上的 Refresh()
或在视图模型中实现 ICollectionView
或任何其他类型的源集合并刷新从那里开始。
如果生成的 CollectionView
实现了 ICollectionViewLiveShaping
接口,添加 LiveFilteringProperties
也应该有效。