gpt4 book ai didi

c# - WPF/MVVM 验证

转载 作者:行者123 更新时间:2023-12-03 10:54:42 24 4
gpt4 key购买 nike

这是表示用作 IdCard 输入的 TextBox 的 XAML 代码

  <TextBox.Text>
<Binding Mode="TwoWay"
Path="IdCardNumber"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<v:AlphaNumValidationRule ValidationStep="UpdatedValue" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>

验证:
public class AlphaNumValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if (string.IsNullOrWhiteSpace((value ?? "").ToString()))
return new ValidationResult(false, Resources.Strings.MessagesResource.RequiredField);
else if (value.ToString().MatchRegex(RegexResource.ALPHANUMERIC))
return new ValidationResult(true, null);
else
return new ValidationResult(false, Resources.Strings.MessagesResource.InvalidFormat);
}
}

View 模型
    public override bool IsValid
{
get { return !string.IsNullOrWhiteSpace(IdCardNumber); }
}
private string idCardNumber;
public string IdCardNumber
{
get { return idCardNumber; }
set { Set(() => IdCardNumber, ref idCardNumber, value);
RaisePropertyChanged("IsValid");
}
}

我想要的是每次更新 IdCard 输入时更新 IsValid, 我尝试了不同的 ValidationStep,但没有一个能如我所愿 .

第一次加载输入时 IsValid 为 false ,当输入正确的值时,删除输入并添加错误的不支持的值后变为 true IsValid 保持不变,因为它保留了最后一个正确的值。

有什么办法可以解决这个问题?

最佳答案

有一个附加事件Validation.Error发生绑定(bind)错误时触发。

所以基本上你可以附加到这个事件并设置 Validation.HasErrors 的值属性到您的 View 模型的 IsValid 属性。

但是,我看到了冲突。您在 View 中定义了验证逻辑,但您想在 ViewModel 中访问它,这就是您遇到麻烦的原因。

我建议您通过实现 INotifyDataErrorInfo 将整个验证逻辑移动到您的 View 模型中。 .那么您将在 viewmodel 中使用所有验证规则和验证错误。

关于c# - WPF/MVVM 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39126010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com