public override bool Update(TreeViewElement <T> treeViewElement) { if (View.AspectGetter != treeViewElement.AspectGetter) { View.AspectGetter = treeViewElement.AspectGetter; } if (View.TreeBuilder != treeViewElement.TreeBuilder) { View.TreeBuilder = treeViewElement.TreeBuilder; } if (Prev.Root != treeViewElement.Root) { var adds = treeViewElement.Root.Except(View.Objects, treeViewElement.EqualityComparer); foreach (var todo in adds) { View.AddObject(todo); } var removes = View.Objects.Except(treeViewElement.Root, treeViewElement.EqualityComparer); foreach (var todo in removes) { var remove = View.Objects.Where(obj => obj == todo).ToArray(); if (remove.Length > 0) { foreach (var item in remove) { View.Remove(item); } } } } return(base.Update(treeViewElement));; }
public State(TreeViewElement <T> element) : base(element, new TreeView <T>()) { View.AspectGetter = element.AspectGetter; View.TreeBuilder = element.TreeBuilder; View.ObjectActivated += (args) => { Prev.ObjectActivated?.Invoke(args.ActivatedObject); View.RefreshObject(args.ActivatedObject); }; View.SelectionChanged += (obj, e) => { Prev.Selected?.Invoke(e.NewValue); }; foreach (var value in element.Root) { View.AddObject(value); } }