如何在 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;
         }
    }