2010-04-09 8 views
7

Wie Validierungen auf WPF Datepicker Toolkit anwenden? Ich möchte, dass es ausgeht, wenn ein ungültiges Datum ausgewählt wurde und in einigen Fällen habe ich Ankunfts- und Abreisedaten, also möchte ich es validieren, um zu sehen, dass das Ankunftsdatum nicht später als das Abreisedatum ist.Datumsauswahl Validierung WPF

Antwort

6

Es scheint ein Jahr über Datum Picker Validierung was a problem. Wie auch immer, jetzt funktioniert es.

Ich bin kein WPF-Spezialist, bu Ich werde versuchen, Ihnen eine Idee zu geben

eine Gültigkeitsregel schreiben

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()"); 
    } 
} 

dann können Sie es auf picker

befestigen
<!-- 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> 

Spezifizieren Sie die Kontrollschablone, wenn der Validierungsfehler auftritt. Standardmäßig ändert der Validierungsfehler die Rahmenfarbe. Ich habe einen zusätzlichen Tooltip verwendet, wenn die Maus über Kontrolle ist.

alt text

source code

Über Validierung 'Picker Picker'.

Ich weiß, dass eine benutzerdefinierte Eigenschaften in Validierungsregeln (siehe AgeRangeRule in msdn Beispiel) verwenden können

Vielleicht sollten Sie diese Funktion wie diese

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

verwenden, aber um Sie anwenden verbindlich müssen Machen Sie MaxDate zu einer DependencyProperty .. Sie sollten auf jeden Fall einen Guru fragen;)

Statt Hervorhebung sollten Sie erwägen, die Änderung des Datepicker-Wertes (über irgendeine Art von Datepicker 'onchange' Event) abzufangen und zu akzeptieren t oder lehnen Sie die Änderung ab.

+0

Vielen Dank für Ihre Antwort..Ich hatte eine Frage, wie soll ich Daten in 2 Datepickers validieren. ZB habe ich das Datum der Ankunft datepicker und das Datum des Abreisedatums. Wie soll ich diese zwei bestätigen, so dass das Ankunftsdatum immer weniger als (vor) dem Abreisedatum ist? – developer