Intencje Converters i ValidationRules są całkiem różne. Konwertery pobierają jedną wartość i przechodzą do innej. Wspomniane 4 przypadki są dość częste do konwersji: zrób to; powiedz, że jest puste; wysadzić w powietrze; ignorować. Jednak ValidationRules to tak/nie rzeczy - są poprawne lub nie. Chociaż może być sens mieć opcję "ignoruj", nie ma takiej.
Najbliżej semantycznie byłoby ustawić IsValid = true
w konstruktorze, ale nie jest to dokładnie to, co chcesz.
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);
}
Ostatnia myśl, którą mam, to jeśli potrzebujesz specjalnych przypadków, a try-catch lub inna logika wysadzi się w powietrze. Jedyne co mogę wymyślić to sprawdzanie typu w ValidationRule, co jest dość wątpliwe, ponieważ tworzysz niepożądaną zależność, ale pomijasz problemy. tj.
if (value is SpecialType)
{
return new ValidationResult(true, null);
}
HTH!
AKTUALIZACJA
Albo jak to około 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>
Czy powiązanie nie jest aktualizowane, a styl elementu interfejsu użytkownika nie ulega zmianie? –