Validation
Plugin.Uno.MVVMExpress.Validation ships DataAnnotations plus IValidator and MustMatchAttribute. The package includes ILLink.Descriptors.xml that roots Required, MinLength, MaxLength, StringLength, Range, RegularExpression, EmailAddress, Compare, and MustMatch. Custom attributes need an app-level descriptor. FluentValidation is an adapter the app may add. Uno Platform bindings use UnoFormViewModel (INotifyDataErrorInfo).
public sealed class ProductDraft
{
[Required, StringLength(80)]
public string Name { get; set; } = "";
[Range(0.01, 1_000_000)]
public decimal Price { get; set; }
}
var summary = await validator.ValidateAsync(draft, cancellationToken);
if (!summary.IsValid)
{
return Outcome.Failure("validation", summary.Messages[0].Message);
}