Вам необходимо реализовать рекурсию , то, что может вызвать само себя, чтобы добраться до многих уровней в глубине дерева.Примерно так:
private ObservableCollection<ObservableCollection<Node>> FindCollection(ObservableCollection<Node> collection, ObservableCollection<ObservableCollection<Node>> retVal){
foreach ( Nodes node in collection){
if (node.Nodes.Count > 0){
collectionToCheck = node.Nodes;
FindCollection(collectionToCheck,retVal);
}
if ( node.Name == SearchPattern ){
retval.Add(collection);
break;
}
}
return retVal;
}
Вы вызываете подпрограмму, чтобы получить коллекцию, которой принадлежит имя, затем можете связать ее с сеткой или сделать с ней что-нибудь еще необходимое.
public void ApplyFilter(){
ObservableCollection<ObservableCollection<Node>> collection = FindCollection(Items,new ObservableCollection<ObservableCollection<Node>());
foreach(ObservableCollection<Node> nodeCollection in collection){
//...iterate over the node collection that contained the filtered item
}
}
Есть много способов реализации рекурсии, я не говорю, что это лучший, но это пример того, как мне это нужно было с одной из моих программ, и, по крайней мере, предоставляет пример, чтобы помочь вам добраться доправильное место.Взять код за чистую монету, я попытался описать, как я его реализовал, используя ваш пример.Возможно, вам придется настроить его для ваших обстоятельств.