Disons que j'ai une classe simplela liaison de données et lancer exception setter
public class Person
{
public string Name { get; set; }
private int _age;
public int Age
{
get { return _age; }
set
{
if(value < 0 || value > 150)
throw new ValidationException("Person age is incorrect");
_age = value;
}
}
}
Je veux installer une liaison pour cette classe:
txtAge.DataBindings.Add("Text", dataSource, "Name");
Maintenant, si j'entre valeur d'âge incorrect dans la zone de texte (disons 200) l'exception dans le setter sera avalée et je ne serai pas capable de faire quoi que ce soit jusqu'à ce que je corrige la valeur dans la zone de texte. Je veux dire que la zone de texte ne sera pas en mesure de perdre le focus. Tout est silencieux - pas d'erreurs - vous ne pouvez rien faire (même fermer le formulaire ou l'application entière) jusqu'à ce que vous corrigiez la valeur.
Cela semble être un bug, mais la question est: qu'est-ce qu'une solution de contournement pour cela?
Existe-t-il une raison pour laquelle vous lancez une exception plutôt que d'implémenter IDataErrorInfo? Je pense que ce dernier est l'approche la plus idiomatique dans WinForms (et il fonctionne encore bien dans WPF). –