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);
}
最後想到的是,如果您需要特殊情況,並且try-catch或其他邏輯會爆炸。唯一我能想到的是在ValidationRule中進行類型檢查,由於您正在創建一個不需要的依賴項,所以這很可疑,但會繞過這些問題。即
if (value is SpecialType)
{
return new ValidationResult(true, null);
}
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>
是否要綁定未更新,並且ui元素的樣式未更改? –