¿Cómo filtrar una jerarquía de vista de árbol wpf usando un ICollectionView?

Tengo una vista de árbol hipotética que contiene estos datos:

RootNode
   Leaf
   vein
SecondRoot
   seeds
   flowers

Estoy tratando de filtrar los nodos para mostrar solo los nodos que contienen un determinado texto. Diga que si especifico "L", el árbol se filtrará y mostrará solo RootNode-> Leaf y SecondRoot-> flowers (porque ambos contienen la letra L).

Siguiendo el patrón m-v-vm, tengo una clase básica de TreeViewViewModel como esta:

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ásico:

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 veo la vista de árbol y el cuadro de búsqueda.

Cuando se ejerce este código, el filtro solo se aplica a los nodos raíz que son insuficientes. ¿Hay una manera de hacer que el filtro se filtre hacia abajo en la jerarquía de nodos para que se llame mi predicado para cada nodo? En otras palabras, ¿se puede aplicar el filtro al TreeView como un todo?

Respuestas a la pregunta(5)

Su respuesta a la pregunta