并非总是可以将数据类型从 DateTime 更改为 DateTime?实际上可能需要 DateTime 对象。(一个典型的场景是当您的控件绑定到具有 DateTime 类型的数据库对象但您正忙于在控件中创建新记录,因此此时该值仍然为空。)在这种情况下,可以像 Paulo 在以下链接中那样编写一个值转换器:http ://www.telerik.com/forums/default-date-value-01-01-001 (参见他的 EditDateConverter 代码。它按原样工作。 ..)我在这里粘贴他的代码以供参考,以防该链接将来停止工作:
public class EditDateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null && value.GetType().FullName == "System.DateTime")
{
var dt2 = (DateTime)value;
if (dt2 != DateTime.MinValue)
return value;
}
DateTime dt;
if (!DateTime.TryParse(value as string, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out dt))
return dt != DateTime.MinValue ? value : null;
return dt;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null && targetType.FullName == "System.DateTime")
return DateTime.MinValue;
return value;
}
}
要在 RadDatePicker 的绑定中使用它,只需将转换器作为资源添加到 XAML 中,然后将转换器添加到绑定中。
在您的 XAML 命名空间声明中,您必须添加转换器的命名空间,例如:
xmlns:converters="clr-namespace:MyNamespace.Converters"
然后在 XAML 的 Resources 部分中,您将拥有:
<UserControl.Resources>
<converters:EditDateConverter x:Name="NullableDate"/>
</UserControl.Resources>
然后,您可以简单地将以下行添加到控件上的绑定中:
Converter={StaticResource NullableDate}
如果您现在有一个空日期,控件将显示水印(例如“输入日期”)而不是 01/01/0001。