Browse Source

Fix validation error not being cleared on valid input (#19477)

* Add failing test for binding error not being cleared, when bound value does not change

* Fix clearing binding error
release/11.3.5
Ondřej Sušovský 6 months ago
committed by Julien Lebosquain
parent
commit
036c47f9d8
  1. 5
      src/Avalonia.Base/Data/Core/BindingExpression.cs
  2. 20
      tests/Avalonia.Base.UnitTests/Data/Core/BindingExpressionTests.DataValidation.cs

5
src/Avalonia.Base/Data/Core/BindingExpression.cs

@ -355,8 +355,9 @@ internal partial class BindingExpression : UntypedBindingExpressionBase, IDescri
}
}
// Don't set the value if it's unchanged.
if (TypeUtilities.IdentityEquals(LeafNode.Value, value, type))
// Don't set the value if it's unchanged. If there is a binding error, we still have to set the value
// in order to clear the error.
if (TypeUtilities.IdentityEquals(LeafNode.Value, value, type) && ErrorType == BindingErrorType.None)
return true;
try

20
tests/Avalonia.Base.UnitTests/Data/Core/BindingExpressionTests.DataValidation.cs

@ -305,6 +305,26 @@ public partial class BindingExpressionTests
BindingErrorType.DataValidationError);
}
[Fact]
public void Setting_Valid_Value_Should_Clear_Binding_Error()
{
var data = new ViewModel { DoubleValue = 5.6 };
var target = CreateTargetWithSource(
data,
o => o.DoubleValue,
enableDataValidation: true,
mode: BindingMode.TwoWay,
targetProperty: TargetClass.StringProperty);
target.String = "5.6";
target.String = "5.6a";
target.String = "5.6";
AssertNoError(target, TargetClass.StringProperty);
GC.KeepAlive(data);
}
public class ExceptionViewModel : NotifyingBase
{
private int _mustBePositive;

Loading…
Cancel
Save