使用 ICollectionview 在 ObservableCollection 中搜索和过滤数据
Search and Filter data in ObservableCollection with ICollectionview
我使用ICollectionView
在ObservableCollection
中搜索程序运行良好,我可以进行搜索操作
public ICollectionView ItemsView => CollectionViewSource.GetDefaultView(DataList);
ItemsView.Filter = o => Filter(o as PackageModel);
private bool Filter(PackageModel item)
{
return SearchText == null
|| item.Name.IndexOf(SearchText, StringComparison.OrdinalIgnoreCase) != -1
|| item.Publisher.IndexOf(SearchText, StringComparison.OrdinalIgnoreCase) != -1;
}
现在我想过滤数据网格中的数据 例如,带有 IsInstalled = true
的项目
public bool IsShowOnlyInstalledApps
{
get => _isShowOnlyInstalledApps;
set
{
SetProperty(ref _isShowOnlyInstalledApps, value);
if (value)
{
var filter = new Predicate<object>(item => ((PackageModel)item).IsInstalled);
ItemsView.Filter = filter;
}
else
{
ItemsView.Filter = null;
}
}
}
我可以看到数据网格中的项目已被过滤但是搜索操作不再有效
使用这个:
return SearchText == null
|| (item.Name.IndexOf(SearchText, StringComparison.OrdinalIgnoreCase) != -1)
|| (item.Publisher.IndexOf(SearchText, StringComparison.OrdinalIgnoreCase) != -1);
我使用ICollectionView
在ObservableCollection
中搜索程序运行良好,我可以进行搜索操作
public ICollectionView ItemsView => CollectionViewSource.GetDefaultView(DataList);
ItemsView.Filter = o => Filter(o as PackageModel);
private bool Filter(PackageModel item)
{
return SearchText == null
|| item.Name.IndexOf(SearchText, StringComparison.OrdinalIgnoreCase) != -1
|| item.Publisher.IndexOf(SearchText, StringComparison.OrdinalIgnoreCase) != -1;
}
现在我想过滤数据网格中的数据 例如,带有 IsInstalled = true
public bool IsShowOnlyInstalledApps
{
get => _isShowOnlyInstalledApps;
set
{
SetProperty(ref _isShowOnlyInstalledApps, value);
if (value)
{
var filter = new Predicate<object>(item => ((PackageModel)item).IsInstalled);
ItemsView.Filter = filter;
}
else
{
ItemsView.Filter = null;
}
}
}
我可以看到数据网格中的项目已被过滤但是搜索操作不再有效
使用这个:
return SearchText == null
|| (item.Name.IndexOf(SearchText, StringComparison.OrdinalIgnoreCase) != -1)
|| (item.Publisher.IndexOf(SearchText, StringComparison.OrdinalIgnoreCase) != -1);