2008-09-18 7 views
1

J'essaie d'utiliser la validation dans WPF. J'ai créé un NotNullOrEmptyValidationRule comme indiqué ci-dessous:Utilisation de la validation dans WPF avec la propriété de dépendance et les déclencheurs de style

public class NotNullOrEmptyValidationRule : ValidationRule 
    { 
     public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
     { 
      if (String.IsNullOrEmpty(value as String)) 
       return new ValidationResult(false, "Value cannot be null or empty"); 

      return new ValidationResult(true, null); 
     } 
    } 

Maintenant, je dois l'utiliser dans ma demande. Dans mon fichier App.xaml j'ai déclaré le style pour le TextBox. Voici la déclaration.

<Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}"> 

      <Setter Property="Background" Value="Green"/> 

      <Style.Triggers> 

       <Trigger Property="Validation.HasError" Value="True"> 

        <Setter Property="Background" Value="Red"/> 
        <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},Path=(Validation.Errors)[0].ErrorContent}"/> 

       </Trigger> 

      </Style.Triggers> 

     </Style> 

Maintenant, je veux l'utiliser sur mon TextBox donc je suis en utilisant le code suivant:

<TextBox Style="{StaticResource textBoxStyle}"> 
       <TextBox.Text> 
        <Binding> 
         <Binding.ValidationRules> 
          <NotNullOrEmptyValidationRule /> 
         </Binding.ValidationRules> 
        </Binding> 
       </TextBox.Text> 


      </TextBox> 

L'erreur vient du Tag NotNullOrEmptyValidationRule. Le vérificateur de syntaxe XAML n'est pas capable de résoudre le NotNullOrEmptyValidationRule. J'ai même essayé de mettre l'espace de noms, mais ça ne semble pas fonctionner.

Répondre

1

je vois que votre liaison sur la zone de texte est définie sur un chemin de 'texte' - est-ce un champ sur quel que soit le datacontext de cette zone de texte? Est-ce que la zone de texte reçoit une valeur ajoutée? De plus, si vous mettez un point d'arrêt dans votre méthode de validation, est-ce que cela se déclenche?

vous pouvez rechercher comment connecter les défaillances dans la liaison et passer en revue les .. ainsi

0

Il existe un bogue dans Visual Studio et Expression Blend qui provoque ce problème. Ce que vous devez faire est de vous assurer que la règle de validation se trouve dans un projet/ensemble distinct que vous pouvez référencer. Cela devrait résoudre le problème. Cependant, vous devrez rajouter l'espace de noms pour que cela fonctionne.

5

Vous avez juste besoin d'ajouter les xmlns à votre fenêtre, et l'utiliser pour référencer votre ValidationRule.

Dans WPF, l'objet est parfaitement adapté pour être utilisé dans le même assemblage.

Étant donné que votre règle n'est pas définie dans l'espace de noms standard XAML, vous devez créer un mappage à votre espace de noms clr comme ceci:

<Window ... 
    xmlns:local="clr-namespace:MyNamespaceName"> 

Et alors vous l'utiliser comme ceci:

<Binding Path="."> 
    <Binding.ValidationRules> 
     <local:NotNullOrEmptyValidationRule /> 
    </Binding.ValidationRules> 
</Binding> 

Modifier J'ai ajouté une instruction Path à la liaison. Vous devez indiquer à la liaison à quoi lier à :)

1

Vous ne disposez pas de cette ligne dans le code ur derrière

Public Sub New() 

    ' This call is required by the Windows Form Designer. 
    InitializeComponent() 

    Me.**NameOfTextBox**.DataContext = Me 
End Sub 
Questions connexes