2009-07-14 3 views
3

J'ai une application WPF utilisant MVVM. J'utilise la liaison à un objet POCO.Modification du message (ou de l'exception) dans la liaison WPF ValidatesOnException

La zone de texte est lié à une propriété de l'objet comme:

  <TextBox.Text> 
       <Binding Path="CertainProperty" Mode="TwoWay" > 
        <Binding.ValidationRules> 
         <ExceptionValidationRule/> 
        </Binding.ValidationRules> 
       </Binding> 
      </TextBox.Text> 

Maintenant, cette propriété est la propriété aa int et lorsque l'utilisateur a essayé d'entrer une valeur non numérique, ils obtiennent la chaîne d'entrée » était pas dans un format correct ". Ce que je dois faire est de personnaliser ce message à un message plus convivial.

Comment puis-je faire cela?

Répondre

0

Malheureusement, cette exception et son message proviennent du code cadre et ne peuvent pas être simplement transférés. Mais une chose que vous pouvez faire est de contourner complètement l'exception en écrivant votre propre ValidationRule. Par exemple:

public class Int32ValidationRule : ValidationRule 
{ 
    public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
    { 
     if (string.IsNullOrEmpty((string)value)) 
      return ValidationResult.ValidResult; 

     int number; 
     return int.TryParse(value.ToString(), out number) 
      ? ValidationResult.ValidResult 
      : new ValidationResult(false, "Please enter a valid integer"); 
    } 
} 

Bien sûr, l'option nucléaire est de transformer CertainProperty en string et laissez votre viewmodel ou modèle valident via IDataErrorInfo, mais ce serait un changement majeur de votre code existant.

Questions connexes