private void AddWatchers(INode node) { node.PropertyChanged += (sender, e) => { IsDirty = true; OnValueChanged?.Invoke(sender, e); }; node.Children.CollectionChanged += (sender, e) => { if (e.Action == NotifyCollectionChangedAction.Add) { foreach (var item in e.NewItems.OfType <INode>()) { ParseNode(item, node.Id); IsDirty = true; } } else if (e.Action == NotifyCollectionChangedAction.Remove) { foreach (var item in e.OldItems.OfType <INode>()) { //RemoveNode(item); IsDirty = true; } } OnChildrenChanged?.Invoke(sender, e); }; }
private void AddWatchers(INode node) { node.PropertyChanged += (sender, e) => { if (e.PropertyName != "IsParsed") { IsDirty = true; changeHandler?.OnNodeChanged(node, e); OnValueChanged?.Invoke(sender, e); } }; node.Children.CollectionChanged += (sender, e) => { IsDirty = true; if (e.Action == NotifyCollectionChangedAction.Add || e.Action == NotifyCollectionChangedAction.Replace && e.NewItems != null) { foreach (var item in e.NewItems.OfType <INode>().ToList()) { if (item != null) { ParseNode(item, node.Id); changeHandler?.OnNodeAdded(node); } } } if (e.Action == NotifyCollectionChangedAction.Remove || e.Action == NotifyCollectionChangedAction.Replace && e.OldItems != null) { foreach (var item in e.OldItems.OfType <INode>().ToList()) { if (item != null) { changeHandler?.OnNodeDeleted(item); } } } if (e.Action == NotifyCollectionChangedAction.Reset && e.OldItems != null) { foreach (var item in e.OldItems.OfType <INode>().ToList()) { if (item != null) { changeHandler?.OnNodeDeleted(item); } } } OnChildrenChanged?.Invoke(sender, e); }; }