diff --git a/src/Avalonia.Controls/ComboBox.cs b/src/Avalonia.Controls/ComboBox.cs
index dbf49f0db5..86b1214ee9 100644
--- a/src/Avalonia.Controls/ComboBox.cs
+++ b/src/Avalonia.Controls/ComboBox.cs
@@ -85,7 +85,8 @@ namespace Avalonia.Controls
/// Defines the property
///
public static readonly StyledProperty TextProperty =
- TextBlock.TextProperty.AddOwner(new(string.Empty, BindingMode.TwoWay));
+ TextBlock.TextProperty.AddOwner(new(string.Empty, BindingMode.TwoWay,
+ enableDataValidation: true));
///
/// Defines the property.
@@ -236,6 +237,14 @@ namespace Avalonia.Controls
UpdateFlowDirection();
}
+ protected override void UpdateDataValidation(AvaloniaProperty property, BindingValueType state, Exception? error)
+ {
+ base.UpdateDataValidation(property, state, error);
+
+ if (property == TextProperty)
+ DataValidationErrors.SetError(this, error);
+ }
+
protected internal override Control CreateContainerForItemOverride(object? item, int index, object? recycleKey)
{
return new ComboBoxItem();
diff --git a/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs b/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs
index a7a4cdef39..9967502b80 100644
--- a/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs
@@ -391,6 +391,28 @@ namespace Avalonia.Controls.UnitTests
}
+ [Fact]
+ public void Text_Validation()
+ {
+ using (UnitTestApplication.Start(TestServices.MockThreadingInterface))
+ {
+ var target = new ComboBox
+ {
+ Template = GetTemplate(),
+ };
+
+ target.ApplyTemplate();
+ target.Presenter!.ApplyTemplate();
+
+ var exception = new System.InvalidCastException("failed validation");
+ var textObservable = new BehaviorSubject(new BindingNotification(exception, BindingErrorType.DataValidationError));
+ target.Bind(ComboBox.TextProperty, textObservable);
+
+ Assert.True(DataValidationErrors.GetHasErrors(target));
+ Assert.Equal([exception], DataValidationErrors.GetErrors(target));
+ }
+ }
+
[Fact]
public void Close_Window_On_Alt_F4_When_ComboBox_Is_Focus()
{