que tienen una vista de árbol hipotéticos que contiene estos datos:Cómo filtrar una jerarquía de vista jerárquica wpf usando un ICollectionView?
RootNode
Leaf
vein
SecondRoot
seeds
flowers
Estoy tratando de filtrar los nodos con el fin de mostrar sólo los nodos que contienen un determinado texto. Digamos que si especifico "L", el árbol será filtrado y mostrará solo RootNode-> Leaf y SecondRoot-> flowers (porque ambos contienen la letra L).
Siguiendo el modelo MV-VM, que tienen una clase básica TreeViewViewModel así:
public class ToolboxViewModel
{
...
readonly ObservableCollection<TreeViewItemViewModel> _treeViewItems = new ObservableCollection<TreeViewItemViewModel>();
public ObservableCollection<TreeViewItemViewModel> Headers
{
get { return _treeViewItems; }
}
private string _filterText;
public string FilterText
{
get { return _filterText; }
set
{
if (value == _filterText)
return;
_filterText = value;
ICollectionView view = CollectionViewSource.GetDefaultView(Headers);
view.Filter = obj => ((TreeViewItemViewModel)obj).ShowNode(_filterText);
}
}
...
}
Y un TreeViewItemViewModel básica:
public class ToolboxItemViewModel
{
...
public string Name { get; private set; }
public ObservableCollection<TreeViewItemViewModel> Children { get; private set; }
public bool ShowNode(string filterText)
{
... return true if filterText is contained in Name or has children that contain filterText ...
}
...
}
todo está configurado en el xaml así que ver la vista de árbol y cuadro de búsqueda.
Cuando se ejerce este código, el filtro solo se aplica a los nodos de raíz que es insuficiente. ¿Hay alguna manera de hacer que el filtro gotee en la jerarquía de nodos para que se llame a mi predicado para cada nodo? En otras palabras, ¿se puede aplicar el filtro a TreeView como un todo?
Lo que acabaste haciendo ? ¿Alguna información de rendimiento que pueda transmitir u otra solución? –