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;
}