2014-12-23 12 views
9

In diesem Datepicker, wenn ich in einem ungültigen Datum wie
1/1/20001 (Enter-Taste)
Ich erhalte die folgende AusnahmeDatepicker System.FormatException

Eine erste Chance Ausnahme des Typs Typ ' System.FormatException 'aufgetreten in mscorlib.dll

Weitere Informationen: Zeichenfolge wurde nicht als gültige DateTime erkannt.

Aber es scheint, dass dies durch die Bindung ausgelöst wird und ich kann keinen Weg finden, damit umzugehen.
Im Debug erhalte ich die oben auf dem Bildschirm

auf Stack-Trace gedreht und es sagt, der Fehler auf SearchItem.Date1
bekommt geworfen wird, aber das Problem ist, dass tatsächlich bekommt in dieser Situation wird nicht aufgerufen

Wenn ich ein gültiges Datum wie 1/1/2000 eingeben, sehe ich sowohl das Set als auch den Aufruf.

Wenn ich eingeben und ungültiges Datum gibt es keinen Aufruf zu setzen.

Von ich ein und ungültiges Datum eingeben und drücken Sie die Eingabetaste oder verlorene Fokus wird nur auf das vorherige Datum zurückgesetzt und wirft keine Ausnahme. Wenn das vorherige Datum null war, wird es auf null zurückgesetzt.

Wenn dies ein kritisches Problem für mich ist, wenn der Benutzer ein gültiges Datum eingibt und dann ein ungültiges Datum eingibt, wird der DatePicker nur auf das letzte gültige Datum zurückgesetzt. Dem Benutzer ist daher nicht bewusst, dass sich das Datum nicht geändert hat.

Die Frage ist, wie kann ich eine ungültige Datumsausnahme behandeln?

<DatePicker Width="140" DisplayDateStart="1/1/1990" DisplayDateEnd="12/31/2020" 
      SelectedDate="{Binding Path=Date1, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"/> 

Wenn ich herausnehmen

, ValidatesOnExceptions=True, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged 

nichts

private DateTime? date1; 
public DateTime? Date1 
{ 
    get 
    { 
     try 
     { 
      return date1; 
     } 
     catch (Exception ex) 
     { 
      return (DateTime?)null; 
      throw; 
     } 
    } 
    set 
    { 
     if (date1 != value) 
     { 
      date1 = value; 
      NotifyPropertyChanged("Date1");  
     } 
    } 
} 
+0

Ist das 'DatePicker',' System.Windows.Controls.DatePicker'? denn wenn es so ist, wird keine Ausnahme ausgelöst, wenn ich deinen Code ausgeführt habe. –

+0

@Bahman_Aries keine Ausnahme ist die falsche Richtung für mich. Ich muss ein ungültiges Datum abfangen. – Paparazzi

Antwort

8

Eine Möglichkeit ändert kann ich denken ist DateValidationError Ereignis zu verwenden:

XAML:

<DatePicker Width="140" DisplayDateStart="1/1/1990" DisplayDateEnd="12/31/2020" 
      SelectedDate="{Binding Path=Date1, Mode=TwoWay, 
      ValidatesOnExceptions=True, ValidatesOnDataErrors=True, 
      UpdateSourceTrigger=PropertyChanged}" 
      DateValidationError="DatePicker_DateValidationError" /> 

-Code hinter:

private void DatePicker_DateValidationError(object sender, DatePickerDateValidationErrorEventArgs e) 
{ 
    // throw FormatException 
    e.ThrowException = true; 

    //OR 

    // handle the exception by showing message and clearing data 
    MessageBox.Show(e.Exception.Message); 
    ((DatePicker)sender).Text = null; 
} 
+0

Bisher sieht das gut aus. Lass mich noch mehr testen. Und danke. – Paparazzi