From 7206580175e79462b0eac8eea89dbf463cb48607 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 19 Aug 2016 01:58:45 +0200 Subject: [PATCH] Filter out broken binding errors in TextBox. --- src/Avalonia.Controls/TextBox.cs | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/Avalonia.Controls/TextBox.cs b/src/Avalonia.Controls/TextBox.cs index 1003fef85f..dbea94f9a4 100644 --- a/src/Avalonia.Controls/TextBox.cs +++ b/src/Avalonia.Controls/TextBox.cs @@ -486,26 +486,28 @@ namespace Avalonia.Controls if (property == TextProperty) { var classes = (IPseudoClasses)Classes; - - if (status.ErrorType == BindingErrorType.None) - { - classes.Remove(":error"); - DataValidationErrors = null; - } - else - { - classes.Add(":error"); - DataValidationErrors = UnpackException(status.Error); - } + DataValidationErrors = UnpackException(status.Error); + classes.Set(":error", DataValidationErrors != null); } } private static IEnumerable UnpackException(Exception exception) { - var aggregate = exception as AggregateException; - return aggregate == null ? - (IEnumerable)new[] { exception } : - aggregate.InnerExceptions; + if (exception != null) + { + var aggregate = exception as AggregateException; + var exceptions = aggregate == null ? + (IEnumerable)new[] { exception } : + aggregate.InnerExceptions; + var filtered = exceptions.Where(x => !(x is BindingBrokenException)).ToList(); + + if (filtered.Count > 0) + { + return filtered; + } + } + + return null; } private int CoerceCaretIndex(int value)