UIF高效的WPF TreeView过滤

时间:2016-12-26 17:53:59

标签: wpf xaml treeview filtering

我需要制作一个可搜索的TreeView。如果任何项目与搜索文本匹配,则其所有父项将自动匹配并展开。任何不匹配的东西都会失去其可见性。

这是我的(示例)界面和过滤代码:

.D:\\Node Applications\\public\\home.htmlindex.html

这个问题与算法无关;据我所知,它工作得很好,并没有任何瓶颈。我的问题是所有节点上interface ITreeItem : INotifyPropertyChanged { IList<ITreeItem> Children { get; } string Header { get; } bool IsExpanded { get; set; } bool IsVisible { get; set; } } void Filter(ITreeItem item, string text) { foreach (var subItem in item.Children) { Filter(subItem, text); } if (item.Header.IndexOf(text, StringComparison.CurrentCultureIgnoreCase) >= 0) item.IsVisible = true; else { foreach (var subItem in item.Children) { if (subItem.IsMatch) { item.IsVisible = true; item.IsExpanded = true; return; } } item.IsVisible = false; item.IsExpanded = false; } } 的{​​{1}}。当树具有非平凡数量的项目时(我可以通过100个项目得到显着的延迟,每个项目有100个子项目),因为UI被这些属性更改轰炸,所以会有很大的停顿。

我认为只要重建列表并在搜索文本发生变化时手动分配TreeView的NotifyPropertyChanged,但另一个不相关的功能(添加/重命名项目)意味着此解决方案需要很多额外的簿记。

0 个答案:

没有答案