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