MAUI表单验证核心是绑定+Data Annotations+INotifyDataErrorInfo接口,需手动实现验证逻辑与错误通知,配合XAML设置实时提示和提交校验。
MAUI 表单验证主要靠绑定 + 数据注解(Data Annotations)+ INotifyDataErrorInfo 接口实现,核心是让 UI 能实时响应数据合法性变化,并给出用户友好的提示。不依赖第三方库也能完成基础到中等复杂度的验证。
在 ViewModel 或 Model 类的属性上加验证特性,比如 [Required]、[EmailAddress]、[StringLength(10, MinimumLength = 3)] 等。MAUI 本身不自动读取这些特性,但配合后续接口就能触发验证逻辑。
INotifyPropertyChanged,用于通知界面属性值变化Validator.TryValidateObject 或封装验证方法ValidateForm()
这是 MAUI(及 Xamarin.Forms)推荐的验证通信方式,能让 Entry、Editor 等控件自动显示错误提示(需配合 ValidatesOnNotifyDataErrors=True)。
INotifyDataErrorInfo 的三个成员:HasErrors、GetErrors(string propertyName)、ErrorsChanged 事件Dictionary> )存每个属性的错误信息SetProperty 后),调用验证并更新对应字段的错误集合,再触发 ErrorsChanged
Entry 加上 ValidatesOnNotifyDataErrors="True" 和 NotifyOnValidationError="True"
MAUI 不自带红色边框或 Tooltip,需要手动控制 UI 状态:
VisualStateManager 定义 Invalid 状态,修改 Entry 的 BackgroundColor 或 BorderColor
Label 绑定到 {Binding GetErrors[Email][0]}(需用 MultiBinding 或封装为只读属性更稳妥)Too
lTipProperties.Text 显示简短提示(仅支持部分平台,如 Windows)IsEnabled="{Binding HasErrors, Converter={StaticResource InverseBoolConverter}}" 禁用除了实时验证,提交前应全量校验并滚动到首个错误项:
ValidateAllProperties() 方法,遍历所有带验证特性的属性并收集错误HasErrors = true 并触发 ErrorsChanged,让所有控件刷新状态ScrollView.ScrollToAsync() 滚动到第一个有错误的 Entry(需给它命名并用 FindByName)基本上就这些。MAUI 验证没那么自动化,但结构清晰、可控性强。重点是把 INotifyDataErrorInfo 接口跑通,后面扩展正则、自定义规则、异步验证(如用户名是否已存在)都容易加进去。