2010-04-09 2 views
7

Come applicare le convalide a WPF datepicker toolkit? Voglio che venga visualizzato l'errore se è selezionata una data non valida e in alcuni casi ho le date di arrivo e partenza, quindi voglio verificarlo per vedere che la data di arrivo non è successiva alla data di partenza.Convalida data picker WPF

risposta

6

Sembra un anno sopra la convalida della selezione data was a problem. Comunque, ora funziona.

Io non sono uno specialista di WPF, bu cercherò di dare un'idea

scrivere una regola di convalida

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

allora si può collegarlo a 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> 

specificare il modello di controllo quando si verifica l'errore di convalida. Per impostazione predefinita, l'errore di convalida cambia il colore del bordo. Ho usato tooltip aggiuntivi quando il mouse ha superato il controllo.

alt text

source code

riguardo 'selettore per picker' convalida.

So che si può utilizzare le proprietà personalizzate nelle regole di validazione (vedi AgeRangeRule in msdn esempio)

Forse si dovrebbe utilizzare questa funzione come questo

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

ma al fine di applicare vincolante è necessario rendere MaxDate una DependencyProperty .. dovresti chiedere definitivamente a un guru;)

Invece di evidenziare devi considerare l'intercettazione della modifica del valore datapicker (tramite una sorta di evento 'onchange' di datepicker) e accettabile t o rifiuta il cambiamento.

+0

Grazie mille per la risposta. Ho avuto una domanda, come posso convalidare le date in 2 datepicker. Ad esempio, ho data di arrivo datapicker e data di partenza datepicker. Come posso convalidare questo due in modo che la data di arrivo sia sempre inferiore a (prima), la data di partenza? – developer