2017-06-01 5 views
0

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 
+0

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

+0

Sie können den SelectedDate-Wert eines DatePicker nur auf einen DateTime-Wert oder null setzen. 00/00/0000 ist weder. – mm8

+0

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

Antwort

0

Wenn ich 00/00/0000 geben Sie es nicht akzeptiert es und macht den Text Datepicker null/leer wieder.

Das ist, weil die SelectedDate Eigenschaft der DatePicker Steuerung ein DateTime? ist. Dies bedeutet, dass Sie nur auf einen gültigen DateTime Wert oder null (default(DateTime?)) setzen können. 00/00/0000 ist weder.

Sie nicht setzen ein DateTime? Feld 00/00/0000 genauso wenig, wie Sie ein int Feld einstellen zu „abc“ oder ein DateTime? zu „cde“. Dies ist einfach kein gültiger Wert für den Datentyp.

Wenn Sie wollen in der Lage sein, dies zu tun, besser Sie ein TextBox verwenden, die Sie in jeden string Wert eingeben und dann diesen string nach Bedarf zu einem DateTime konvertieren. Es gibt ein Calendar Steuerelement, das Sie zusammen mit dem TextBox verwenden können, damit der Benutzer ein Datum auswählen kann.

+0

Ich freue mich mehr auf Ideen wie Maskierung oder irgendeine Art von Out-of-the-Box-Ideen, um dies zu tun. Ich werde meine Frage bearbeiten, um das zu reflektieren. Danke für die Informationen und Vorschläge zur Verwendung von Textbox mit Kalender. – Jay

+0

Sie können dies nicht mit dem eingebauten DatePicker-Steuerelement aus den Gründen, die ich in meiner Antwort erwähnte, "erledigen". Deshalb habe ich vorgeschlagen, dieses Steuerelement nicht zu verwenden, sondern zum Beispiel eine TextBox. – mm8

Verwandte Themen