Ich habe einen DatePicker und ich möchte dem Benutzer erlauben, 00/00/0000 einzugeben. Wenn ich 00/00/0000 eingabe, akzeptiert es es nicht und macht den DatePicker-Text wieder null/leer.Wie kann ich 0/0/0 als gültiges Datum in WPF DatePicker akzeptieren?
Der DatePicker ist bereits mit einem Konverter verbunden, der den gebundenen Wert in das MM/TT/JJJJ-Format umwandelt und auch während der Benutzereingabe nach Nicht-Null-Werten und ConvertsBack in MMddyyyy sucht.
Wie gesagt, ich weiß 00/00/0000 ist kein gültiger Wert für DateTime, aber gibt es eine Möglichkeit, 01/01/0001 als 00/00/0000 mit Stilen oder auf andere Weise angezeigt zu werden?
Grundsätzlich sollte Null gemäß den Bedürfnissen des Clients darstellen - kein Wert wurde eingegeben und 00000000 sollte darstellen - Wert war zum Zeitpunkt der Dateneingabe unbekannt. Ich weiß, dass es keinen Sinn ergibt, aber ich denke manchmal, dass das ein Teil der Aufgabe eines Entwicklers ist - unrealistische Anforderungen zu erfüllen. Textbox ist eine einfache Option, aber wenn es via DatePicker möglich ist, dann besser.
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert
If Not ComponentModel.DesignerProperties.GetIsInDesignMode(New DependencyObject) Then
If value IsNot Nothing Then
Dim str As String = value.ToString
Try
Dim dt As Date = DateTime.ParseExact(str, "MMddyyyy", New CultureInfo("en-US"), Nothing)
Return dt.ToString("MM/dd/yyyy")
Catch ex As Exception
If str.Trim = "" Then
Return Nothing
Else
Return str
End If
End Try
Else
Return Nothing
End If
End If
Return value.ToString
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack
Return System.Convert.ToDateTime(value).ToString("MMddyyyy")
End Function
Nehmen wir an, Sie schaffen es irgendwie, DatePicker 00/00/0000 akzeptieren zu lassen. Nun wäre die große Frage: Welches Datum ist eigentlich 00/00/0000? Hmm, es ist kein Date, oder? (in Bezug auf den Gregorianischen Kalender) – elgonzo
Sie können den SelectedDate-Wert eines DatePicker nur auf einen DateTime-Wert oder null setzen. 00/00/0000 ist weder. – mm8
Als Randnotiz: Im Gregorianischen Kalender ist das erste Jahr AD das Jahr 1 (= 1AD). Das Jahr vor 1AD ist nicht das Jahr Null. Es ist 1BC. – elgonzo