Пример #1
0
 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);
     };
 }
Пример #2
0
        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);
            };
        }