如何在WPF中为Material Design文本框设置简单校验规则?
针对WPF MaterialDesign文本框校验的简化实现方案
你提到的直接在代码中控制文本框错误状态的需求,MaterialDesignInXamlToolkit(MDIX)本身已经提供了更简洁的原生支持,同时也和你已经用过的WPF标准校验体系完全适配,以下是两种常用的简化方案:
方案1:后台代码直接控制(和你的示例逻辑完全匹配,更简洁)
你不需要分别给HasAnError和ErrorMessage赋值,直接调用MDIX内置的ValidationHelper静态类一行代码就能完成设置:
// 设置错误状态 MaterialDesignThemes.Wpf.ValidationHelper.SetError(MobileTextBox, "Mobile no. not found"); // 清除错误状态 MaterialDesignThemes.Wpf.ValidationHelper.SetError(MobileTextBox, null);
这个方法内部会自动处理错误状态的切换,不需要手动操作两个属性。
方案2:MVVM模式下的无代码实现(适配你已掌握的校验体系)
你已经用过的INotifyDataErrorInfo、ValidationRule等WPF标准校验能力,MDIX的控件都做了原生适配,完全不需要你手动操作界面控件,校验逻辑全部放在ViewModel中即可,控件会自动识别错误并展示对应样式:
XAML绑定示例:
<TextBox Style="{StaticResource MaterialDesignOutlinedTextBox}" materialDesign:HintAssist.Hint="Mobile" Text="{Binding MobileNumber, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" />
只要你的ViewModel实现了INotifyDataErrorInfo接口,在校验不通过时触发ErrorsChanged事件,MDIX文本框会自动显示错误边框和你返回的错误信息,完全不需要编写后台控件操作代码。
如果是简单的格式校验,你甚至可以直接在XAML中声明校验规则,连ViewModel逻辑都不需要额外写:
<TextBox Style="{StaticResource MaterialDesignOutlinedTextBox}" materialDesign:HintAssist.Hint="Mobile"> <TextBox.Text> <Binding Path="MobileNumber" UpdateSourceTrigger="PropertyChanged"> <Binding.ValidationRules> <!-- 正则校验手机号格式 --> <RegexValidationRule Pattern="^1[3-9]\d{9}$" ErrorContent="请输入正确的11位手机号" /> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox>
内容的提问来源于stack exchange,提问作者afham Mk
相关产品推荐
相关产品推荐

