2010-12-16 160 views
2

J'applique une règle de validation à la liaison d'une zone de texte. J'ai la validation à partir de la perspective de l'interface utilisateur en ce que je vois le message d'erreur sur la pointe de l'outil et que le modèle d'erreur est également appliqué (juste la bordure rouge habituelle).Application d'une règle de validation sur une liaison pour afficher un résultat de validation uniquement sur l'interface utilisateur

Cependant, la validation que je dois afficher n'est pas super critique et est suffisante pour être simplement affichée sur l'interface utilisateur. Le problème que j'ai avec la liaison est que la règle de validation empêche les mises à jour sur l'objet source une fois qu'une règle de validation est violée Je veux que la source soit mise à jour avec exactement le contenu de la zone de texte.

Existe-t-il un moyen d'afficher le modèle d'erreur sur l'interface utilisateur sans affecter la source liée.

Mon code ressemble

<TextBox Name="texBox"> 
     <TextBox.Text> 
     <Binding Path="ProductCode" UpdateSourceTrigger="PropertyChanged"> 
      <Binding.ValidationRules> 
      <jas:RegexValidationRule 
       RegexText="^[A-Z]{3}\.[0-9]{3}$" 
       ErrorMessage="Invalid product code. (Examples: ABC.123 xyz.789)" 
       RegexOptions="IgnoreCase" 
       /> 
      </Binding.ValidationRules> 
     </Binding> 
     </TextBox.Text> 

Répondre

0

Vous pouvez essayer de regarder dans IDataErrorInfo à la place. Ensuite, vous obtiendrez la validation dans votre classe de sauvegarde (ViewModel) afin que le texte dans le TextBox affiché soit synchronisé avec la propriété de sauvegarde. Dans votre cas, il ressemblera à quelque chose comme ça

<TextBox Name="texBox"> 
    <TextBox.Text> 
     <Binding Path="ProductCode" UpdateSourceTrigger="PropertyChanged"/> 
    </TextBox.Text> 
</TextBox> 

Dans la classe de soutien datacontext

public class YourClass : IDataErrorInfo 
{ 
    //... 

    #region IDataErrorInfo Members 
    public string Error 
    { 
     get { throw new NotImplementedException(); } 
    } 

    public string this[string columnName] 
    { 
     get 
     { 
      string result = null; 
      if (columnName == "ProductCode") 
      { 
       // Do your Regex Validation. 
       if (regexValidationFailed) 
       { 
        result = "Validation Error Text/Tooltip"; 
       } 
      } 
      if (columnName == "SomeOtherProperty) 
      //... 

      return result; 
     }    
    } 
    #endregion 
} 
1

Cela se produit parce que si une erreur de validation ou un autre type d'erreur se produit à tout moment pendant le processus de liaison, le processus est halted.I suppose que vous devez définir le ValidationStep propriété à UpdatedValue

Exemple:

<jas:RegexValidationRule ValidationStep="UpdatedValue" 
       RegexText="^[A-Z]{3}\.[0-9]{3}$" 
       ErrorMessage="Invalid product code. (Examples: ABC.123 xyz.789)" 
       RegexOptions="IgnoreCase" 
       /> 

S'il vous plaît vérifier la section « processus de validation » dans Data Binding Overview .Ce vous donnera un bon aperçu de ce que vous liez à faire

+0

-I est passé par votre suggestion.It était une grande aide pour comprendre la liaison et ValidationRules. Mais si je vais par votre suggestion, je perds la validation de l'interface utilisateur. Même le modèle d'erreur n'est pas appliqué. Je n'utilise pas DataErrorValidationRule. Mon _RegexValidationRule_ hérite simplement de ValidationRule. Est-ce que cela frappe un accord que quelque chose pourrait être mal – gprasant