如何在WPF DatePicker中接受0/0/0作为有效日期?

时间:2017-06-01 20:11:56

标签: wpf datepicker

我有一个DatePicker,我想允许用户输入00/00/0000。如果我输入00/00/0000它不接受它并使DatePicker文本再次为空/空白。

DatePicker已经附加了一个转换器,它将绑定值转换为MM / dd / yyyy格式,并在用户输入期间检查非空值和ConvertsBack到MMddyyyy。

正如所指出的,我知道00/00/0000不是DateTime的有效值,但有没有办法伪造01/01/0001使用样式或其他方式显示为00/00/0000?< / p>

基本上根据客户的需要,null应表示 - 没有输入任何值,00000000应表示 - 数据输入时未知值。我知道它没有意义但我有时候认为这是开发人员工作的一部分 - 以满足不切实际的要求。文本框很容易,但如果可以通过DatePicker实现,那就更好了。

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

1 个答案:

答案 0 :(得分:0)

  

如果我输入00/00/0000它不接受它并使DatePicker文本再次为空/空白。

这是因为SelectedDate控件的DatePicker属性是DateTime?。这意味着您只能 将其设置为有效的DateTime值或null(default(DateTime?))。 00/00/0000都不是。

无法DateTime?字段设置为00/00/0000,只需将int字段设置为&#34; abc&#34;或DateTime?到&#34; cde&#34;。这根本不是数据类型的有效值。

如果您希望能够这样做,最好使用可以输入TextBox值的string,然后将此string转换为DateTime,需要。您可以使用Calendar控件与TextBox一起使用,以便用户能够选择日期。