Stylet的数据验证

1. 通过NuGet安装 FluentValidation 包
2. 从IModelValidator接口定义自己的验证类
  • 注意FluentModelValidator的版本,我使用的是8.1.2,不同版本的API可能修改
public class FluentModelValidator<T> : IModelValidator<T>
    {
        private readonly IValidator<T> validator;
        private T _subject;

        public FluentModelValidator(IValidator<T> validator)
        {
            this.validator = validator;
        }

        public void Initialize(object subject)
        {
            this._subject = (T)subject;
        }

        public async Task<IEnumerable<string>> ValidatePropertyAsync(string propertyName)
        {
            // If someone's calling us synchronously, and ValidationAsync does not complete synchronously,
            // we'll deadlock unless we continue on another thread.
            return (await this.validator.ValidateAsync(this._subject, CancellationToken.None, propertyName).ConfigureAwait(false))
                .Errors.Select(x => x.ErrorMessage);
        }

        public async Task<Dictionary<string, IEnumerable<string>>> ValidateAllPropertiesAsync()
        {
            // If someone's calling us synchronously, and ValidationAsync does not complete synchronously,
            // we'll deadlock unless we continue on another thread.
            return (await this.validator.ValidateAsync(this._subject).ConfigureAwait(false))
                .Errors.GroupBy(x => x.PropertyName)
                .ToDictionary(x => x.Key, x => x.Select(failure => failure.ErrorMessage));
        }
    }
3. 定义ViewModel
  • Screen继承了ValidatingModelBase ,所以可以ViewModel可以直接继承自Screen
public class LoginViewModel : Screen
    {
        /// <summary>
        /// 手机号
        /// </summary>
        public string PhoneNumber { get; set; }
       }

4. 为LoginViewModel 编写校验类
  • 注意命名规则 xxxViewModel + Validator, 符合这个命名规则的类,stylet框架会自己调用
 public class LoginViewModelValidator : AbstractValidator<LoginViewModel>
 {
       public LoginViewModelValidator()
        {
            RuleFor(x => x.PhoneNumber).NotEmpty().Length(11).WithMessage("请输入正确的手机号");
        }
}
5. 在页面绑定PhoneNumber
<TextBox Text="{Binding PhoneNumber,UpdateSourceTrigger=PropertyChanged}"></TextBox>

6. 联合按钮的禁用和启用状态
  • 在LoginViewModel中添加以下代码
protected override void OnValidationStateChanged(IEnumerable<string> changedProperties)
        {
            base.OnValidationStateChanged(changedProperties);
            // Fody can't weave other assemblies, so we have to manually raise this
            this.NotifyOfPropertyChange(() => this.CanSubmit);
        }
        public bool CanSubmit => !this.HasErrors;

        public async void Submit()
        {
            if (await this.ValidateAsync())
            {
                MessageBox.Show(”success“);
            }
        }
在Python中,有许多强大的库可以用于数据清洗和数据校验,其中最常用的是NumPy和Pandas。NumPy是一个用于科学计算的库,而Pandas则是一个专门用于数据处理和分析的库。 使用NumPy和Pandas,你可以轻松地对数据进行各种操作,例如删除重复值、处理缺失值、过滤异常值,以及整理数据等。这些库支持向量化操作,这意味着你不需要使用循环来处理每个值,而是可以直接对整个数据集进行操作,从而提高了处理数据的效率。 对于数据清洗和数据校验,你可以使用NumPy和Pandas的功能来实现。例如,你可以使用Pandas来读取Excel或数据库中的数据,并使用NumPy和Pandas的各种函数和方法来进行数据转换、校验和比较。你还可以使用断言操作来验证数据的正确性,并将错误信息输出成表格的形式,方便团队对错误进行修复。 此外,你还可以结合UI或接口自动化来验证数据清洗后的数据是否符合预期,并进行功能回归测试。总之,Python的NumPy和Pandas库提供了强大的功能和效率,使得数据清洗和数据校验变得更加简便和高效。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【python】数据清洗测试思路以及探索](https://blog.csdn.net/qq_34979346/article/details/122035075)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qingchuu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值