这是1/1/0001问题的“扩展”问题: Original Question
原始Q.解决方案 - 将DateTime字段设置为可为空(DateTime?)解决了这个问题。
当基础字段必须 NOT NULL?
时,解决方案是什么?(在这种情况下,绑定会导致DataGrid列Date Time Picker将其自身设置为01/01/0001)
我的案例中的实际实体是由实体框架6生成的。
答案 0 :(得分:2)
一种解决方案是定义转换器。像这样的东西:
public class NotNullDateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var aDateTime = value as DateTime;
if (aDateTime != null && aDateTime == .... )
return null
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后,您可以为转换器定义一个静态字段,以便稍后在xaml中使用它。
public static NotNullDateConverter NotNullDateConverter = new NotNullDateConverter();
然后在xaml中使用此转换进行绑定:
SelectedDate="{Binding Path=DueDate, Converter={x:Static local:SomeClass.NotNullDateConverter}}"
答案 1 :(得分:2)
我遇到了完全相同的问题,所以我写了一个可以清除非日期的转换器。
//Just weeds out non-dates. Format should be set with StringFormat on the binding
public class DateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
DateTime date = (DateTime)value;
if (date != null && date.Year != 1)
{
return date;
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
我这样使用它:
<DataTemplate.Resources>
<logic:DateConverter x:Key="DateConverter"/>
</DataTemplate.Resources>
<TextBlock Text="{Binding LastUpdateTime, StringFormat={}{0:MM/dd/yyyy H:mm:ss}, Converter={StaticResource DateConverter}}"/>