Browse Source

Filter out broken binding errors in TextBox.

pull/691/head
Steven Kirk 10 years ago
parent
commit
7206580175
  1. 32
      src/Avalonia.Controls/TextBox.cs

32
src/Avalonia.Controls/TextBox.cs

@ -486,26 +486,28 @@ namespace Avalonia.Controls
if (property == TextProperty) if (property == TextProperty)
{ {
var classes = (IPseudoClasses)Classes; var classes = (IPseudoClasses)Classes;
DataValidationErrors = UnpackException(status.Error);
if (status.ErrorType == BindingErrorType.None) classes.Set(":error", DataValidationErrors != null);
{
classes.Remove(":error");
DataValidationErrors = null;
}
else
{
classes.Add(":error");
DataValidationErrors = UnpackException(status.Error);
}
} }
} }
private static IEnumerable<Exception> UnpackException(Exception exception) private static IEnumerable<Exception> UnpackException(Exception exception)
{ {
var aggregate = exception as AggregateException; if (exception != null)
return aggregate == null ? {
(IEnumerable<Exception>)new[] { exception } : var aggregate = exception as AggregateException;
aggregate.InnerExceptions; var exceptions = aggregate == null ?
(IEnumerable<Exception>)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) private int CoerceCaretIndex(int value)

Loading…
Cancel
Save