From 4d0ff8c26dda2b050f3c0812ee619ba81886928f Mon Sep 17 00:00:00 2001 From: Petar Tasev Date: Wed, 25 Mar 2026 10:29:25 -0700 Subject: [PATCH] Fix ComboBox not showing Text property validation (#20978) --- src/Avalonia.Controls/ComboBox.cs | 11 +++++++++- .../ComboBoxTests.cs | 22 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) 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() {