i have a Class bound to a wpf treeview like this
public class Vorlageneintrag : INotifyPropertyChanged
    {
        public string erw_Ausgabe { get; set; }
        public string erw_Pfad { get; set; }
        public string erw_Mailadresse { get; set; }
        ...
        public ObservableCollection<Vorlageneintrag> Items {get; set;}
        ...
 public Vorlageneintrag Copy()
        {
            return (Vorlageneintrag)this.MemberwiseClone();
        }
    }
works fine, now i added a Filterfunction, that removes all not filter matching "Vorlageneintrag". Works as i want. But now my Problem: How can get i the original List back to reset my Filter? reseting Itemssource by using .toList() or .MemberwiseClone() from a copy works only for the first "Layer" but not for Vorlageneintrag.Items or Vorlageneintrag.Items[0].Items and deeper (there can be "unlimited" Sub-sub-sub...-trees). Or will it better to create/fill a complete new object?
Edit: Filtering:
 List<Vorlageneintrag> temp =((ObservableCollection<Vorlageneintrag>)tree_vorlagen.ItemsSource).ToList();
              
                ObservableCollection<Vorlageneintrag> orglist=((ObservableCollection<Vorlageneintrag>)tree_vorlagen.ItemsSource);
             
                    foreach (var item in temp)
                    {
                    
                  
                    if(Loopandfilter(item).Items.Count==0)
                    {
                       orglist.Remove(item);
                    }
                    else
                    {
                        item.IsNodeExpanded = true;
                    }
                    }
 private Vorlageneintrag Loopandfilter(Vorlageneintrag item)
        {
            if(item.Items.Count==0)
            {
                item.IsNodeExpanded = true;
                return item;
            }
            else
            {
                List<Vorlageneintrag> temp = item.Items.ToList();
               
                foreach (Vorlageneintrag tmp_item in temp)
                {
                 
                    
                    if (Loopandfilter(tmp_item).Items.Count == 0)
                    {
                        if (!tmp_item.erw_Ausgabe.ToLower().Contains(tb_qicksearch.Text.ToLower()))
                        {
                            item.Items.Remove(tmp_item);
                            
                        }
                        else
                        {
                            
                            item.IsNodeExpanded = true;
                        }
                    }
                }
                
            }
              
            return item;
        }
 
     
    