Primary APIs:
AvaloniaPropertyMetadata.EnableDataValidationAvaloniaProperty.Register(..., enableDataValidation: true)DataValidationErrorsBindingNotificationBindingErrorTypeDataValidationExceptionBindingPlugins.DataValidatorsImportant members:
DataValidationErrors.ErrorsProperty, HasErrorsProperty, ErrorConverterPropertyDataValidationErrors.GetErrors(...), SetErrors(...), SetError(...), ClearErrors(...)BindingNotification.Error, ErrorType, Value, HasValueBindingNotification.ExtractValue(...), ExtractError(...), UpdateValue(...)DataValidationException.ErrorDataReference source files:
src/Avalonia.Base/AvaloniaPropertyMetadata.cssrc/Avalonia.Controls/DataValidationErrors.cssrc/Avalonia.Base/Data/BindingNotification.cssrc/Avalonia.Base/Data/DataValidationException.cssrc/Avalonia.Base/Data/Core/Plugins/BindingPlugins.cssrc/Avalonia.Base/Data/Core/Plugins/DataAnnotationsValidationPlugin.csPractical flow for control-bound validation:
enableDataValidation: true).BindingNotification / exceptions).DataValidationErrors attached state is updated (Errors, HasErrors).:error state and error collections for UX.using Avalonia;
using Avalonia.Data;
public class EmailEditor : Avalonia.Controls.TemplatedControl
{
public static readonly StyledProperty<string?> EmailProperty =
AvaloniaProperty.Register<EmailEditor, string?>(
nameof(Email),
defaultBindingMode: BindingMode.TwoWay,
enableDataValidation: true);
public string? Email
{
get => GetValue(EmailProperty);
set => SetValue(EmailProperty, value);
}
}
DataAnnotationsValidationPlugin is registered by default in BindingPlugins.DataValidators, so no AppBuilder extension call is required.
AppBuilder.Configure<App>()
.UsePlatformDetect()
.StartWithClassicDesktopLifetime(args);
DataValidationErrorsif (DataValidationErrors.GetHasErrors(textBox))
{
var errors = DataValidationErrors.GetErrors(textBox);
// Render or log errors.
}
DataValidationErrors.SetErrorConverter(textBox, error =>
{
return error is Exception ex ? ex.Message : error;
});
DataAnnotationsValidationPlugin relies on reflection and is trimming-sensitive.INotifyDataErrorInfo patterns and compiled bindings.DataValidationErrors state.ErrorConverter.DataAnnotationsValidationPlugin was removed from BindingPlugins.DataValidators.Default mode:
XAML-first references:
TextBox/input bindings with compiled bindingDataValidationErrors styling and error templatesXAML-first usage example:
<TextBox xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Text="{CompiledBinding Email, Mode=TwoWay}" />
Code-only alternative (on request):
textBox.Bind(TextBox.TextProperty, new Binding(nameof(EditUserViewModel.Email))
{
Mode = BindingMode.TwoWay
});
if (DataValidationErrors.GetHasErrors(textBox))
LogValidation(textBox, DataValidationErrors.GetErrors(textBox));