diff --git a/src/Avalonia.Base/AvaloniaObject.cs b/src/Avalonia.Base/AvaloniaObject.cs
index bc1e95805f..1f14ddede4 100644
--- a/src/Avalonia.Base/AvaloniaObject.cs
+++ b/src/Avalonia.Base/AvaloniaObject.cs
@@ -646,10 +646,12 @@ namespace Avalonia
/// enabled.
///
/// The property.
- /// The new binding value for the property.
- protected virtual void UpdateDataValidation(
- AvaloniaProperty property,
- BindingValue value)
+ /// The current data binding state.
+ /// The current data binding error, if any.
+ protected virtual void UpdateDataValidation(
+ AvaloniaProperty property,
+ BindingValueType state,
+ Exception? error)
{
}
@@ -860,7 +862,7 @@ namespace Avalonia
if (metadata.EnableDataValidation == true)
{
- UpdateDataValidation(property, value);
+ UpdateDataValidation(property, value.Type, value.Error);
}
}
diff --git a/src/Avalonia.Controls/AutoCompleteBox.cs b/src/Avalonia.Controls/AutoCompleteBox.cs
index 3316c06bf5..5c95932c1f 100644
--- a/src/Avalonia.Controls/AutoCompleteBox.cs
+++ b/src/Avalonia.Controls/AutoCompleteBox.cs
@@ -1346,12 +1346,16 @@ namespace Avalonia.Controls
/// enabled.
///
/// The property.
- /// The new binding value for the property.
- protected override void UpdateDataValidation(AvaloniaProperty property, BindingValue value)
+ /// The current data binding state.
+ /// The current data binding error, if any.
+ protected override void UpdateDataValidation(
+ AvaloniaProperty property,
+ BindingValueType state,
+ Exception? error)
{
if (property == TextProperty || property == SelectedItemProperty)
{
- DataValidationErrors.SetError(this, value.Error);
+ DataValidationErrors.SetError(this, error);
}
}
diff --git a/src/Avalonia.Controls/Button.cs b/src/Avalonia.Controls/Button.cs
index a4a147e0f3..0ef1ba4c8c 100644
--- a/src/Avalonia.Controls/Button.cs
+++ b/src/Avalonia.Controls/Button.cs
@@ -498,12 +498,15 @@ namespace Avalonia.Controls
protected override AutomationPeer OnCreateAutomationPeer() => new ButtonAutomationPeer(this);
///
- protected override void UpdateDataValidation(AvaloniaProperty property, BindingValue value)
+ protected override void UpdateDataValidation(
+ AvaloniaProperty property,
+ BindingValueType state,
+ Exception? error)
{
- base.UpdateDataValidation(property, value);
+ base.UpdateDataValidation(property, state, error);
if (property == CommandProperty)
{
- if (value.Type == BindingValueType.BindingError)
+ if (state == BindingValueType.BindingError)
{
if (_commandCanExecute)
{
diff --git a/src/Avalonia.Controls/Calendar/CalendarDatePicker.cs b/src/Avalonia.Controls/Calendar/CalendarDatePicker.cs
index 0ac2056ed1..0409eb30aa 100644
--- a/src/Avalonia.Controls/Calendar/CalendarDatePicker.cs
+++ b/src/Avalonia.Controls/Calendar/CalendarDatePicker.cs
@@ -540,11 +540,11 @@ namespace Avalonia.Controls
}
}
- protected override void UpdateDataValidation(AvaloniaProperty property, BindingValue value)
+ protected override void UpdateDataValidation(AvaloniaProperty property, BindingValueType state, Exception? error)
{
if (property == SelectedDateProperty)
{
- DataValidationErrors.SetError(this, value.Error);
+ DataValidationErrors.SetError(this, error);
}
}
diff --git a/src/Avalonia.Controls/MenuItem.cs b/src/Avalonia.Controls/MenuItem.cs
index 955af8888b..619eafb71b 100644
--- a/src/Avalonia.Controls/MenuItem.cs
+++ b/src/Avalonia.Controls/MenuItem.cs
@@ -501,12 +501,15 @@ namespace Avalonia.Controls
return new MenuItemAutomationPeer(this);
}
- protected override void UpdateDataValidation(AvaloniaProperty property, BindingValue value)
+ protected override void UpdateDataValidation(
+ AvaloniaProperty property,
+ BindingValueType state,
+ Exception? error)
{
- base.UpdateDataValidation(property, value);
+ base.UpdateDataValidation(property, state, error);
if (property == CommandProperty)
{
- _commandBindingError = value.Type == BindingValueType.BindingError;
+ _commandBindingError = state == BindingValueType.BindingError;
if (_commandBindingError && _commandCanExecute)
{
_commandCanExecute = false;
diff --git a/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs b/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs
index fbbaab6182..4d86a0f17c 100644
--- a/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs
+++ b/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs
@@ -403,12 +403,16 @@ namespace Avalonia.Controls
/// enabled.
///
/// The property.
- /// The new binding value for the property.
- protected override void UpdateDataValidation(AvaloniaProperty property, BindingValue value)
+ /// The current data binding state.
+ /// The current data binding error, if any.
+ protected override void UpdateDataValidation(
+ AvaloniaProperty property,
+ BindingValueType state,
+ Exception? error)
{
if (property == TextProperty || property == ValueProperty)
{
- DataValidationErrors.SetError(this, value.Error);
+ DataValidationErrors.SetError(this, error);
}
}
diff --git a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
index 6f2554bef3..bff6799792 100644
--- a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
+++ b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
@@ -501,12 +501,16 @@ namespace Avalonia.Controls.Primitives
/// enabled.
///
/// The property.
- /// The new binding value for the property.
- protected override void UpdateDataValidation(AvaloniaProperty property, BindingValue value)
+ /// The current data binding state.
+ /// The current data binding error, if any.
+ protected override void UpdateDataValidation(
+ AvaloniaProperty property,
+ BindingValueType state,
+ Exception? error)
{
if (property == SelectedItemProperty)
{
- DataValidationErrors.SetError(this, value.Error);
+ DataValidationErrors.SetError(this, error);
}
}
diff --git a/src/Avalonia.Controls/Slider.cs b/src/Avalonia.Controls/Slider.cs
index f0a0fba1af..64dfce22d4 100644
--- a/src/Avalonia.Controls/Slider.cs
+++ b/src/Avalonia.Controls/Slider.cs
@@ -361,11 +361,14 @@ namespace Avalonia.Controls
Value = IsSnapToTickEnabled ? SnapToTick(finalValue) : finalValue;
}
- protected override void UpdateDataValidation(AvaloniaProperty property, BindingValue value)
+ protected override void UpdateDataValidation(
+ AvaloniaProperty property,
+ BindingValueType state,
+ Exception? error)
{
if (property == ValueProperty)
{
- DataValidationErrors.SetError(this, value.Error);
+ DataValidationErrors.SetError(this, error);
}
}
diff --git a/src/Avalonia.Controls/TextBox.cs b/src/Avalonia.Controls/TextBox.cs
index 1f3dbc87db..0be58e7fcc 100644
--- a/src/Avalonia.Controls/TextBox.cs
+++ b/src/Avalonia.Controls/TextBox.cs
@@ -1262,11 +1262,14 @@ namespace Avalonia.Controls
return new TextBoxAutomationPeer(this);
}
- protected override void UpdateDataValidation(AvaloniaProperty property, BindingValue value)
+ protected override void UpdateDataValidation(
+ AvaloniaProperty property,
+ BindingValueType state,
+ Exception? error)
{
if (property == TextProperty)
{
- DataValidationErrors.SetError(this, value.Error);
+ DataValidationErrors.SetError(this, error);
}
}
diff --git a/tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_DataValidation.cs b/tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_DataValidation.cs
index 65f03b3eca..d48e58136a 100644
--- a/tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_DataValidation.cs
+++ b/tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_DataValidation.cs
@@ -52,14 +52,14 @@ namespace Avalonia.Base.UnitTests
source.OnNext(BindingValue.DataValidationError(new Exception()));
source.OnNext(7);
- var result = target.Notifications.Cast>().ToList();
+ var result = target.Notifications;
Assert.Equal(4, result.Count);
- Assert.Equal(BindingValueType.Value, result[0].Type);
- Assert.Equal(6, result[0].Value);
- Assert.Equal(BindingValueType.BindingError, result[1].Type);
- Assert.Equal(BindingValueType.DataValidationError, result[2].Type);
- Assert.Equal(BindingValueType.Value, result[3].Type);
- Assert.Equal(7, result[3].Value);
+ Assert.Equal(BindingValueType.Value, result[0].type);
+ Assert.Equal(6, result[0].value);
+ Assert.Equal(BindingValueType.BindingError, result[1].type);
+ Assert.Equal(BindingValueType.DataValidationError, result[2].type);
+ Assert.Equal(BindingValueType.Value, result[3].type);
+ Assert.Equal(7, result[3].value);
}
[Fact]
@@ -72,8 +72,7 @@ namespace Avalonia.Base.UnitTests
target.Bind(Class1.NonValidatedDirectProperty, source);
source.OnNext(1);
- var result = target.Notifications.Cast>().ToList();
- Assert.Equal(1, result.Count);
+ Assert.Equal(1, target.Notifications.Count);
}
[Fact]
@@ -154,13 +153,14 @@ namespace Avalonia.Base.UnitTests
set { SetAndRaise(ValidatedDirectStringProperty, ref _directString, value); }
}
- public IList