2011-02-06 3 views
0

Bonsoir,Obtenir le statut de validation de WPF contrôle

J'ai une classe PhoneNumber avec les parties du numéro de téléphone séparé (indicatif régional, préfixe, suffixe) et je valide les champs de saisie par la longueur et les codes de zone non valide. Je veux créer un comportement qui passe automatiquement au contrôle suivant lorsque le contrôle actuel est valide. I pourrait coder en dur la capacité dans le codebehind en contournant, mais je préférerais de beaucoup la validation des données de l'utilisateur et les comportements pour le faire de manière cohérente et réutiliser la capacité.

Je rencontre cependant un problème, en essayant d'obtenir l'état de validation des contrôles TextBox. Où pouvez-vous trouver cela? S'il y a un moyen d'obtenir cette valeur, y a-t-il un événement associé à son changement?

Style de commande qui se raccorde Validation

  <Style x:Key="ToolTipValidation" TargetType="{x:Type Control}"> 
       <Setter Property="Validation.ErrorTemplate" Value="{StaticResource StandardErrorValidationTemplate}"/> 
       <Style.Triggers> 
        <Trigger Property="Validation.HasError" Value="True"> 
         <Setter Property="ToolTip" Value="{Binding (Validation.Errors)[0].ErrorContent, RelativeSource={x:Static RelativeSource.Self}}"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 

De toute évidence, lorsque le contrôle est le modèle d'erreur appliqué, il comporte une erreur. Pour quelque raison que ce soit, Behavior ErrorHandler ne le récupère pas.

Répondre

1

Regardez dans la propriété jointe Validation.HasError. Il existe également un événement Validation.Error que vous pouvez gérer.

Mise à jour:

Vous pouvez vous abonner à l'événement Validation.Error dans le code-behind comme ceci:

Validation.AddErrorHandler(myTextBox, OnValidationError); 

Dans le gestionnaire d'erreur peut ressembler à ceci:

private void OnValidationError(object o, ValidationErrorEventArgs e) 
{ 
    if (e.Action == ValidationErrorEventAction.Added) 
    { 
     // on error added logic 
    } 
    else 
    { 
     // on error removed logic 
    }   
} 
+0

je peux être manquant quelque chose, je ne peux pas trouver Validation.Error. Je vois Validation.ErrorEvent, mais c'est un événement routed, et mon instruction AddHandler me dit ErrorEvent n'est pas un événement de System.Windows.Controls.Validation. – CodeWarrior

+0

Vous pouvez utiliser Validation.AddErrorHandler. Voir ma mise à jour –

+2

OK, alors j'ai implémenté AddErrorHandler. Mes contrôles sont maintenant en cours de validation, mais le gestionnaire n'est jamais touché que le contrôle soit validé ou non. Je vais poster mon style qui déclenche la validation ci-dessus si cela aide. – CodeWarrior