Inheritance: Node, IDisposable
Ejemplo n.º 1
0
        internal static void Notify(ErrorNode errorNode)
        {
            var source = errorNode.Source;

            if (source == null)
            {
                return;
            }

            Scope.SetHasErrors(source, errorNode.HasErrors);
            var  parent    = VisualTreeHelper.GetParent(source);
            Node childNode = errorNode;

            while (parent != null)
            {
                if (Scope.GetForInputTypes(parent) == null)
                {
                    break;
                }

                var parentNode = (Node)parent.GetValue(Scope.ErrorsProperty);
                if (ShouldRemoveChildNode(parentNode, childNode))
                {
                    parentNode.RemoveChild(childNode);
                    if (parentNode is ScopeNode && parentNode.Children.Count == 0)
                    {
                        Scope.SetErrors(parent, null);
                    }
                    else
                    {
                        parentNode.RefreshErrors();
                    }
                }
                else if (ShouldAddChildNode(parent, childNode, source))
                {
                    if (parentNode == null)
                    {
                        parentNode = new ScopeNode(parent, childNode);
                        Scope.SetErrors(parent, parentNode);
                    }
                    else
                    {
                        parentNode.AddChild(childNode);
                        parentNode.RefreshErrors();
                    }
                }

                Scope.SetHasErrors(parent, parentNode?.HasErrors == true);
                childNode = parentNode;
                parent    = VisualTreeHelper.GetParent(parent);
            }
        }
Ejemplo n.º 2
0
 private static void OnScopeForChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
 {
     if (((InputTypeCollection)e.NewValue)?.IsInputType(d) == true)
     {
         if (GetErrors(d) == null)
         {
             SetErrors(d, ErrorNode.CreateFor(d));
         }
     }
     else if (((InputTypeCollection)e.OldValue)?.IsInputType(d) == true)
     {
         d.ClearValue(ErrorsPropertyKey);
     }
 }
 internal void Remove(ErrorNode errorNode)
 {
     this.Remove(errorNode.ErrorCollection);
 }
 internal void Add(ErrorNode errorNode)
 {
     this.Add(errorNode.ErrorCollection);
 }