我将RadDatePicker绑定到viewModel dateTime属性。当数据库中的属性为null时,我得到01/01/0001。如何更改此行为只是将日期字段留空.. 例如:
在数据库中===> experiation_date:NULL 在视图(GUI)中===> experation_date:01/01/0001
预期结果===> experation_date:{空白}
答案 0 :(得分:1)
将SelectedDate设置为null(而不是DBNull):
RadDatePicker1.SelectedDate = null;
并在xaml中将DateTimeWatermarkContent设置为空字符串:
<telerik:RadDatePicker x:Name="RadDatePicker1" DateTimeWatermarkContent="" />
答案 1 :(得分:1)
并不总是可以将数据类型从DateTime更改为DateTime?因为事实上可能需要DateTime对象。 (典型情况是当您的控件绑定到具有DateTime类型的数据库对象但您正忙于在控件中创建新记录时,此时该值仍为空。)在这种情况下,可以像保罗那样在以下链接中编写一个值转换器: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的参考资料部分中,您将拥有:
<UserControl.Resources>
<converters:EditDateConverter x:Name="NullableDate"/>
</UserControl.Resources>
然后,您只需将以下行添加到控件上的绑定中:
Converter={StaticResource NullableDate}
如果您现在有一个空日期,控件将显示水印(例如&#34;输入日期&#34;)而不是01/01/0001。
答案 2 :(得分:0)
如果你是绑定不可为空的datetime变量,即(DateTime)来控制那么它将使用默认的01/01/001日期而不是空.... 因此,如果您希望将默认值设置为Empty,那么只需将您控制的变量的数据类型更改为(DateTime?).....
DateTime ===&gt;日期时间?
工作正常......
谢谢。!!!