簡體   English   中英

如何在DateTime為空(01/01/0001)時將加載時的DateTimePicker對象保留為空白(選擇日期),但在有值時填充該對象?

[英]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對象,當它沒有從數據庫中獲取任何日期時,使用默認文本(選擇日期)進行填充。 如果數據庫中有日期,則該字段將填充該日期。

我把在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,或更改所需的屬性。

您可以嘗試在屬性的設置器和獲取器中使用一些代碼

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;
         }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM