2010-09-20 2 views
0

J'ai un écran WPF qui affiche un certain nombre d'entrées TextBox. J'ai un style qui gère toute la validation:Validation WPF: propriétés de validation de style/gabarit

<Style x:Key="TextBoxStyle" BasedOn="{x:Null}" TargetType="{x:Type TextBox}"> 
    <!-- etc etc --> 
    <Setter Property="Validation.ErrorTemplate"> 
     <Setter.Value> 
      <ControlTemplate> 
       <Border Grid.Column="0" BorderBrush="Red" BorderThickness="1"> 
        <StackPanel> 
         <AdornedElementPlaceholder /> 
        </StackPanel> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="True"> 
      <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

La seule chose que je dois appliquer à la zone de texte est de dire la liaison qu'elle valide. Vu que j'ai un certain nombre de ces boîtes sur l'application, je préférerais ne pas répéter cette annonce pour l'ensemble de l'application.

<TextBox Text="{Binding TargetValue, ValidatesOnExceptions=true, ValidatesOnDataErrors=true, NotifyOnValidationError=true}" Style="{DynamicResource TextBoxStyle}" /> 

J'ai essayé d'ajouter la propriété Text.Binding.ValidatesOnDataErrors au style, ce qui ne fonctionne pas, ni sembler la bonne façon de le faire. Est-il possible de créer un style de liaison par défaut? Des suggestions appréciées!

Répondre

2

Malheureusement, il n'existe aucun moyen de remplacer les valeurs par défaut pour les propriétés de liaison. Une approche alternative que vous pourriez prendre est de créer votre propre extension de liaison personnalisée avec ValidatesOnException et ValidatesOnDataError tous les deux mis à true. De cette façon, vous pouvez faire quelque chose comme:

<TextBox Text="{BindingWithValidation TargetValue}/> 

Vous pouvez utiliser la classe de base fourni in this article pour le rendre un peu plus facile de créer votre extension de balisage liaison personnalisée.

+0

Je ne pense pas que je vais aller à tous ces problèmes, mais il semble sain. Il n'y a pas de répétition et il n'y a pas de ridicule. :) – rrhartjr

+0

En effet. Bien pour vous. =) – ASanch