pmf*_*pmf 14 c# validation wpf
使用转换器,我可以区分至少4种与源值更新有关的行为:
Binding.DoNothing
( - >不更新源,但不指示错误eiter)使用a ValidationRule
,我只能区分成功( - >更新源)和失败( - >不更新源),但我无法模拟与之关联的行为Binding.DoNothing
有没有办法以ValidationRule
类似于Binding.DoNothing
转换器行为的方式使用?
Converters和ValidationRules的意图非常不同.转换器获取一个值并将其转换为另一个值.你提到的4个案例足以转换:做到这一点; 说它是空的; 爆炸; 忽视.但是ValidationRules是/不是 - 它们是有效的,或者它们不是.虽然有一个"忽略"选项可能是有意义的,但没有一个.
最接近语义的是IsValid = true
在构造函数中设置,但它并不是你想要的.
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
try
{
// try normal setup/validation
}
catch
{
// handle exceptions, return false
}
// decide if you want to return false
// return true (equivalent to nothing/ignore)
return new ValidationResult(true, null);
}
Run Code Online (Sandbox Code Playgroud)
最后的想法是,如果你需要特殊情况,那么try-catch或其他逻辑就会爆炸.我唯一能想到的是ValidationRule中的类型检查,由于您创建了一个不合需要的依赖项,但是它可以绕过这些问题,这是非常可疑的.即
if (value is SpecialType)
{
return new ValidationResult(true, null);
}
Run Code Online (Sandbox Code Playgroud)
HTH!
更新
或者怎么样IgnorableValidationRule
?
public class IgnorableValidationRule : ValidationRule
{
public bool Ignore { get; set; } = false;
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if (Ignore) return new ValidationResult(true, null);
return new ValidationResult(false, "Why does everyone ignore me?");
}
}
<TextBox.Text>
<Binding Path="Data">
<Binding.ValidationRules>
<local:IgnorableValidationRule Ignore="True"/> <!-- na na -->
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
931 次 |
最近记录: |