Gli intenti di Convertitori e ValidationRules sono piuttosto diversi. I convertitori prendono un valore e lo trasformano in un altro. I 4 casi che hai citato sono abbastanza comuni per la conversione: fallo; dì che è nulla; saltare; ignorare. Tuttavia ValidationRules sono sì/no - sono validi o non lo sono. Mentre potrebbe avere senso avere un'opzione "ignora", non ce n'è uno.
Il più vicino semanticamente sarebbe quello di impostare IsValid = true
nel costruttore, ma non è esattamente quello che vuoi.
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);
}
ultimo pensiero che ho è se avete bisogno di casi particolari, e il try-catch o altra logica si esplodere. L'unica cosa che mi viene in mente è un controllo di tipo nel ValidationRule, che è piuttosto discutibile dal momento che stai creando una dipendenza indesiderata, ma eviterebbe i problemi. Ad esempio
if (value is SpecialType)
{
return new ValidationResult(true, null);
}
HTH!
AGGIORNATO
O come circa un 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>
fonte
2015-10-22 14:28:09
Vuoi che il binding non sia aggiornato e lo stile dell'elemento ui non sia cambiato? –