c# - 是否可以过滤 ICollectionView 以仅显示子级而不是整个层次结构?
问题描述
我一直在尝试过滤 ObservableCollection(类似于 TreeView)以仅显示过滤器的确切命中而不是整个层次结构。这需要在不添加第二个 ObservableCollection 的情况下完成,因为这只会使整个代码更难维护。
因此,例如,假设我们有以下层次结构:
Item1
-Item1-1
-Item1-2
--Item1-2-1
---Item1-2-1-1
Item2
-Item2-1
-Item2-2
我想用“-2”过滤它。我期待的结果是:
Item1-2
Item1-2-1
Item1-2-1-1
Item2-2
但我得到的结果是这样的:
Item1
-Item1-2
--Item1-2-1
---Item1-2-1-1
Item2
-Item2-1
因此,过滤时不会显示任何类型的层次结构。这可能吗?到目前为止,我得到的是以下过滤代码:
private ICollectionView _visibleItems;
public ICollectionView VisibleItems
{
get
{
return GetVisibleItems(_items);
}
}
private ICollectionView GetVisibleItems( ObservableCollection<TreeSource> ts )
{
if (ts != null)
{
_visibleItems = CollectionViewSource.GetDefaultView(ts);
_visibleItems.Filter = i => !(( TreeSource )i).IsFilteredOut;
RaisePropertyChanged("VisibleItems");
}
return _visibleItems;
}
public string Filter
{
get { return _filter; }
set
{
SetProperty(ref _filter, value);
foreach (TreeSource item in _items)
{
item.ApplyFilter(_filter);
}
VisibleItems.Refresh();
}
}
internal void ApplyFilter(string filter)
{
IsFilteredOut = Text.IndexOf(filter, StringComparison.OrdinalIgnoreCase) < 0;
if (Children == null)
return;
foreach (var child in Children)
{
child.ApplyFilter(filter);
//if (!child.IsFilteredOut)
//{
// IsFilteredOut = false;
//}
}
VisibleChildren.Refresh();
}
解决方案
推荐阅读
- sorting - 循环列表时出现 TI 基本索引错误
- c++ - 无需调试或在 VS Code 中运行即可构建项目
- react-native - 如何在 TextInput 的 onChangeText 中调用异步函数
- android - Android 过滤器列表视图,如 Instagram
- c# - 如何在 Autoac 模块中注册依赖于来自外部文件的配置值的服务
- javascript - 如何使用javascript翻译地图框gl js中geoJSON线上的标记
- android - 如何减少重复的 Firebase 监听器
- html - 如何通过 CSS 将图像缩放到原始大小?
- symfony - 为什么 returnValueMap() 返回 NULL
- python - Python:有什么方法可以抓取和检测单页应用程序中的更改?