如何在 DateTime 为 null (01/01/0001) 时将 DateTimePicker 对象留空(Select 一个日期),但在有值时填充?
How to leave DateTimePicker object blank (Select a date) on load when DateTime is null (01/01/0001) but populate when there is a value?
我试图让一个 DateTimePicker 对象在没有从数据库返回任何日期时填充默认文本(Select 一个日期)。如果数据库中有日期,该字段将填充该日期。
我编写的代码有两种方式绑定 SelectedDate 选项到代码隐藏中的 DateTime 属性。它正常工作并用 01/01/0001 填充该字段,因为那是 DateTime 对象的空值。我尝试将其更改为 OneWayToSource,如果日期大于 01/01/0001,则只绑定日期,但如果没有日期,它会在对象周围放置一个红框。
有什么建议吗?
感谢大家的帮助!这是我找到的解决方案。
[ValueConversion(typeof(DateTime), typeof(DateTime))]
class DateTimeNullConverter: IValueConverter
{
public object Convert (object value, Type targetType, object parameter, Culture culture)
{
if (value != null)
{
DateTime dateTime = (DateTime)value;
if (dateTime.Year.ToString == "1")
return null;
else
return dateTime;
}
else
{
return null;
}
}
public object ConvertBack (object value, Type targetType, object parameter, Culture culture)
{
DateTime convertDateTime;
if (value == null)
{
convertDateTime = new DateTime();
}
else
{
convertDateTime = (DateTime) value;
}
return convertDateTime;
}
}
创建绑定到同一控件的 DateBlankConverter 转换器:
<DatePicker x:Name="DatePickerInstance"
Visibility="{Binding ElementName=DatePickerInstance,
Converter={StaticResource DateBlankConverter}, ConverterParameter={Binding Date}}"/>
并在转换器内部检查日期是否为空以隐藏或显示 DatePicker,或者更改您需要的 属性。
您可以尝试在 属性
的 setter 和 getter 中使用一些代码
private DateTime? _date;
public DateTime? Date
{
get
{
if (null == _date)
{
//Set some initial value
//or just return some default value without setting the property
}
return _date;
}
set
{
if (value != _date)
{
_date = value;
this.OnPropertyChanged("Date");
}
}
}
感谢大家的帮助!这是我找到的解决方案。
[ValueConversion(typeof(DateTime), typeof(DateTime))]
class DateTimeNullConverter: IValueConverter
{
public object Convert (object value, Type targetType, object parameter, Culture culture)
{
if (value != null)
{
DateTime dateTime = (DateTime)value;
if (dateTime.Year.ToString == "1")
return null;
else
return dateTime;
}
else
{
return null;
}
}
public object ConvertBack (object value, Type targetType, object parameter, Culture culture)
{
DateTime convertDateTime;
if (value == null)
{
convertDateTime = new DateTime();
}
else
{
convertDateTime = (DateTime) value;
}
return convertDateTime;
}
}
我试图让一个 DateTimePicker 对象在没有从数据库返回任何日期时填充默认文本(Select 一个日期)。如果数据库中有日期,该字段将填充该日期。
我编写的代码有两种方式绑定 SelectedDate 选项到代码隐藏中的 DateTime 属性。它正常工作并用 01/01/0001 填充该字段,因为那是 DateTime 对象的空值。我尝试将其更改为 OneWayToSource,如果日期大于 01/01/0001,则只绑定日期,但如果没有日期,它会在对象周围放置一个红框。
有什么建议吗?
感谢大家的帮助!这是我找到的解决方案。
[ValueConversion(typeof(DateTime), typeof(DateTime))]
class DateTimeNullConverter: IValueConverter
{
public object Convert (object value, Type targetType, object parameter, Culture culture)
{
if (value != null)
{
DateTime dateTime = (DateTime)value;
if (dateTime.Year.ToString == "1")
return null;
else
return dateTime;
}
else
{
return null;
}
}
public object ConvertBack (object value, Type targetType, object parameter, Culture culture)
{
DateTime convertDateTime;
if (value == null)
{
convertDateTime = new DateTime();
}
else
{
convertDateTime = (DateTime) value;
}
return convertDateTime;
}
}
创建绑定到同一控件的 DateBlankConverter 转换器:
<DatePicker x:Name="DatePickerInstance"
Visibility="{Binding ElementName=DatePickerInstance,
Converter={StaticResource DateBlankConverter}, ConverterParameter={Binding Date}}"/>
并在转换器内部检查日期是否为空以隐藏或显示 DatePicker,或者更改您需要的 属性。
您可以尝试在 属性
的 setter 和 getter 中使用一些代码private DateTime? _date;
public DateTime? Date
{
get
{
if (null == _date)
{
//Set some initial value
//or just return some default value without setting the property
}
return _date;
}
set
{
if (value != _date)
{
_date = value;
this.OnPropertyChanged("Date");
}
}
}
感谢大家的帮助!这是我找到的解决方案。
[ValueConversion(typeof(DateTime), typeof(DateTime))]
class DateTimeNullConverter: IValueConverter
{
public object Convert (object value, Type targetType, object parameter, Culture culture)
{
if (value != null)
{
DateTime dateTime = (DateTime)value;
if (dateTime.Year.ToString == "1")
return null;
else
return dateTime;
}
else
{
return null;
}
}
public object ConvertBack (object value, Type targetType, object parameter, Culture culture)
{
DateTime convertDateTime;
if (value == null)
{
convertDateTime = new DateTime();
}
else
{
convertDateTime = (DateTime) value;
}
return convertDateTime;
}
}