我有一个wpf应用程序,其中我有这个属性绑定到日期选择器
public Nullable<System.DateTime> dpc_date_engagement { get; set; }
因此,我添加了一个转换器:
public class DateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
return ((DateTime)value).ToShortDateString();
return String.Empty;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string strValue = value.ToString();
DateTime resultDateTime;
return DateTime.TryParse(strValue, out resultDateTime) ? resultDateTime : value;
}
}
在XAML文件中:
<DatePicker >
<DatePicker.Text>
<Binding Path="dpc_date_engagement" UpdateSourceTrigger="PropertyChanged">
<Binding.Converter>
<converter:DateConverter/>
</Binding.Converter>
</Binding>
</DatePicker.Text>
</DatePicker>
问题是当日期为空时,显示的文本为1/1/0001。
- 如何修复代码,使其在空值时显示空字符串而不是01/01/0001?
3条答案
按热度按时间e5nqia271#
我发现处理DatePicker中使用的nullable****DateTime字段的最简单方法是设置TargetNullValue=''
在XAML文件中:
l7mqbcuq2#
传递给转换器的可为空的
value
本身不是null
,即使它包含null
值(它甚至不能为空,因为它是一个结构体,因此不能为空)。因此,不是将
value
与null
进行比较,而是将其强制转换为Nullable<Datetime>
,然后检查其HasValue
属性。此外,您的绑定属性中似乎有类似
DateTime.MinValue
的内容,而不是null
,所以您也应该检查一下:koaltpgm3#
对我来说,我实际上不得不将
Mode=TwoWay
属性添加到我的DatePicker中。现在它可以完美地处理可空日期:NullableDateConverter.cs
MainWindow.xaml