2010-04-09 6 views
7

Comment appliquer des validations à la boîte à outils WPF datepicker? Je veux l'erreur si la date invalide est sélectionnée et dans certains cas j'ai des dates d'arrivée et de départ, donc je veux valider pour voir que la date d'arrivée n'est pas plus tard que la date de départ.Validation du sélecteur de date WPF

Répondre

6

Il semble qu'il y ait un an au-dessus de la date de validation du sélecteur was a problem. Quoi qu'il en soit, maintenant ça marche.

Je ne suis pas un spécialiste WPF, bu, je vais essayer de vous donner une idée

écrire une règle de validation

public class DateExpiredRule : ValidationRule 
{ 

    public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
    { 
     DateTime orderDate = (DateTime)value; 

     return new ValidationResult(orderDate < DateTime.Now, "Please, enter date before Now()"); 
    } 
} 

alors vous pouvez le joindre à datepicker

<!-- since validation works hand by hand with binding, 
     I use hidden datepicker as binding source --> 
    <WPFToolkit:DatePicker Name="dateProvider" Visibility="Collapsed"> 
    </WPFToolkit:DatePicker> 

    <WPFToolkit:DatePicker Name="notExpired"> 
     <WPFToolkit:DatePicker.SelectedDate> 
      <Binding ElementName="dateProvider" Path="SelectedDate" UpdateSourceTrigger="PropertyChanged"> 
       <Binding.ValidationRules> 
        <local:DateExpiredRule/> 
       </Binding.ValidationRules> 
      </Binding> 
     </WPFToolkit:DatePicker.SelectedDate> 
    </WPFToolkit:DatePicker> 

Spécifiez le modèle de contrôle lorsque l'erreur de validation se produit. Par défaut, l'erreur de validation change la couleur de la bordure. J'ai utilisé une info-bulle supplémentaire lorsque la souris est hors de contrôle.

alt text

source code

A propos de 'sélecteur de sélecteur' validation.

Je sais que l'on peut utiliser des propriétés personnalisées dans les règles de validation (voir AgeRangeRule dans msdn exemple)

Peut-être que vous devriez utiliser cette fonctionnalité comme celui-ci

<local:MaxDateRule MaxDate="{Binding ElementName=DepartureDatePicker, Path=SelectedDate" /> 

mais afin d'appliquer vous liant besoin faire de MaxDate un DependencyProperty .. vous devriez certainement demander à un gourou;)

Au lieu de mettre en surbrillance, vous devriez envisager d'intercepter le changement de valeur de datepicker (via un événement de type "onchange" de datepicker) et d'accepter t ou rejeter le changement.

+0

Merci beaucoup pour votre réponse .. J'avais une question, comment puis-je valider les dates dans 2 datepickers. Par exemple, j'ai la date d'arrivée datepicker et la date de départ datepicker. Comment dois-je valider ces deux afin que la date d'arrivée soit toujours inférieure à (avant), la date de départ? – developer