我有一个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
答案 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
一起使用,以便用户能够选择日期。