如何在点击Button后激活或重新评估Entry的CharactersValidationBehavior
实现点击按钮后才触发Entry验证的方法
步骤1:调整ValidationBehavior的触发规则
先修改CharactersValidationBehavior的Flags属性,禁用自动触发验证的配置,让它只在手动调用时执行验证:
<Entry.Behaviors> <toolkit:CharactersValidationBehavior x:Name="inputValidationBehavior" IsValid="{Binding InputValid}" Flags="" CharacterType="Alphanumeric" MinimumCharacterTypeCount="1" /> </Entry.Behaviors>
把
Flags设为空字符串,就关掉了ValidateOnValueChanged(值变化时验证)和ValidateOnAttached(控件加载时验证)这两个自动触发规则,确保Entry初始化和输入过程中不会自动校验。
步骤2:给按钮绑定验证触发命令
在XAML里给按钮绑定一个命令,点击时触发验证操作:
<Button Text="提交" Command="{Binding ValidateInputCommand}" />
步骤3:实现手动验证逻辑
根据你的代码结构,有两种实现方式:
方式1:在ContentView代码后台调用验证
直接通过Behavior的名称调用Validate()方法,触发验证并自动更新绑定的InputValid属性:
public ICommand ValidateInputCommand => new Command(() => { inputValidationBehavior.Validate(); // 验证完成后可根据InputValid的值做后续操作,比如提交表单 });
方式2:在ViewModel中手动校验输入值
如果用独立的ViewModel,不想依赖UI控件实例,可以直接在ViewModel里编写验证逻辑:
private string _inputText; public string InputText { get => _inputText; set => SetProperty(ref _inputText, value); } private bool _inputValid; public bool InputValid { get => _inputValid; set => SetProperty(ref _inputValid, value); } public ICommand ValidateInputCommand => new Command(() => { // 手动校验:非空且全部是字母/数字 InputValid = !string.IsNullOrEmpty(InputText) && InputText.All(c => char.IsLetterOrDigit(c)); // 后续处理逻辑,比如弹窗提示或提交数据 });
补充说明
- 当前配置里的
MinimumCharacterTypeCount="1"已经能满足必填要求(确保输入至少有一个符合规则的字符),如果需要单独的非空校验,可以额外添加RequiredValidationBehavior,同样设置Flags=""后一起手动触发。 - 用方式1调用Behavior的
Validate()时,会自动同步IsValid到绑定的InputValid属性,无需手动赋值。
内容的提问来源于stack exchange,提问作者OXO
相关产品推荐
相关产品推荐

