过滤 ICollectionView 以根据搜索的术语存在的时间对字符串进行排序
Filter a ICollectionView to order strings based off of how early a searched for term exists
我正在寻找一个名为 FilteredStrings
的字符串对象的 ICollectionView,它基于搜索的字符串在每个字符串中出现的时间。我的 ICollection 正在用 CollectionViewSource.GetDefaultView(_repository.GetObjects());
.
实例化
GetObjects()
只是 returns 一个 IEnumerable<string>()
已收集到存储库中。
我原来的列表是这样的:
ObjAect
ObjectA
AObject
ObjectB
ObjectC
用户将在 UI 中的搜索框中键入内容,因此在这种情况下,他们将搜索 A
,然后 ICollectionView 应进行过滤以仅显示包含搜索文本的字符串,但然后还根据搜索到的测试出现的时间对它们重新排序。
结果应该是这样的:
AObject
ObjAect
ObjectA
我当前的代码如下所示:
public void Search(string searchText)
{
if (string.IsNullOrWhiteSpace(searchText))
{
FilteredComponentViewModels.Filter = null;
return;
}
FilteredComponentViewModels.Filter = s => s.IndexOf(searchText, StringComparison.CurrentCultureIgnoreCase) >= 0;
}
对于支持排序的 ICollectionView
实现(可由 CanSort
属性 识别),我们可以将 IComparer
的实现分配给 ICollectionView.CustomSort
属性.
由于我们的基础集合只是 IEnumerbale<string>
,我们可以使用 System.Runtime.Extensions.dll
程序集中 System.StringComparer
的现有实现:
FilteredComponentViewModels = GetDefaultView(_repository.GetObjects())
as ListCollectionView;
FilteredComponentViewModels.CustomSort = StringComparer.CurrentCultureIgnoreCase;
我正在寻找一个名为 FilteredStrings
的字符串对象的 ICollectionView,它基于搜索的字符串在每个字符串中出现的时间。我的 ICollection 正在用 CollectionViewSource.GetDefaultView(_repository.GetObjects());
.
GetObjects()
只是 returns 一个 IEnumerable<string>()
已收集到存储库中。
我原来的列表是这样的:
ObjAect
ObjectA
AObject
ObjectB
ObjectC
用户将在 UI 中的搜索框中键入内容,因此在这种情况下,他们将搜索 A
,然后 ICollectionView 应进行过滤以仅显示包含搜索文本的字符串,但然后还根据搜索到的测试出现的时间对它们重新排序。
结果应该是这样的:
AObject
ObjAect
ObjectA
我当前的代码如下所示:
public void Search(string searchText)
{
if (string.IsNullOrWhiteSpace(searchText))
{
FilteredComponentViewModels.Filter = null;
return;
}
FilteredComponentViewModels.Filter = s => s.IndexOf(searchText, StringComparison.CurrentCultureIgnoreCase) >= 0;
}
对于支持排序的 ICollectionView
实现(可由 CanSort
属性 识别),我们可以将 IComparer
的实现分配给 ICollectionView.CustomSort
属性.
由于我们的基础集合只是 IEnumerbale<string>
,我们可以使用 System.Runtime.Extensions.dll
程序集中 System.StringComparer
的现有实现:
FilteredComponentViewModels = GetDefaultView(_repository.GetObjects())
as ListCollectionView;
FilteredComponentViewModels.CustomSort = StringComparer.CurrentCultureIgnoreCase;