【问题标题】:DatePicker databinding sets default value to 1/1/0001 WPF c#DatePicker 数据绑定将默认值设置为 1/1/0001 WPF c#
【发布时间】:2012-06-24 04:59:51
【问题描述】:

我有一个 DatePicker 绑定到对象内的 DataTime,并且在运行时,而不是 DatePicker 中的字符串“Select a Date”,而是显示“1/1/0001”,这使得很难使用实际的日历.当我将 DatePicker 与字符串绑定时,我没有遇到问题,但是将其更改为 DateTime 就可以了。请让我知道这是如何工作的。这是我目前所拥有的:

在 XAML 中我有:

<DatePicker Grid.Column="4" Grid.Row="9" Name="dueDateBox" VerticalAlignment="Center">
    <DatePicker.SelectedDate>
        <Binding Path="DueDate" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay">
            <Binding.ValidationRules>
                <my:DateRangeRule/>
            </Binding.ValidationRules>
        </Binding>
    </DatePicker.SelectedDate>
</DatePicker>

在 C# 中我有:

public DateTime DueDate
{
    get { return dueDate; }
    set
    {
        if (DueDate != null) || !DueDate.Equals(value))
        {
            dueDate = value;
            OnPropertyChanged("DueDate");
        }
    }
}

我还设置了一个依赖属性,不确定这是否起作用:

public static readonly DependencyProperty DueDateProperty =
        DependencyProperty.Register("DueDate", typeof(DateTime),
        typeof(UpdateJobDialog), new PropertyMetadata(DateTime.Now));

【问题讨论】:

    标签: c# wpf datetime data-binding datepicker


    【解决方案1】:

    可能有助于使用 DateTime 吗?而不是 DateTime,因为 DateTime 不可为空,所以您设置为默认值 1/1/0001,而不是 null,这将导致请选择您习惯的日期消息。

    public DateTime? DueDate
    {
        //Need to change the type of the private variable as well
        get { return dueDate; }
        set
        {
            if (DueDate != null) || !DueDate.Equals(value))
            {
                dueDate = value;
                OnPropertyChanged("DueDate");
            }
        }
    }
    

    【讨论】:

    • 如果该字段可以为空,它可以工作。如果字段不为空怎么办?
    【解决方案2】:

    您没有将 DueDateProperty 依赖属性连接到您的 DueDate 属性。试试这个:

    public DateTime DueDate
    {
        get { return (DateTime)GetValue(DueDateProperty); }
        set { SetValue(DueDateProperty, value); }
    }
    

    【讨论】:

      【解决方案3】:

      我在将具有空值的日期属性绑定到日期选择器时遇到了同样的问题。无论我尝试什么,显示的值都是 01/01/0001。我最终通过将第二个属性设置为专门绑定到 xaml 日期选择器的字符串来解决此问题,如果我的日期为空,则返回 string.empty

      这解决了它...(VB中的代码)

      Public Property ClosedDateDTP() As String
          Get
              If _closedDate = Nothing Then
                  Return String.Empty
              Else
                  Return _closedDate.ToString
              End If
          End Get
          Set(value As String)
              If value = Nothing Then
                  _closedDate = Nothing
              Else
                  _closedDate = CDate(value)
              End If
          End Set
      End Property
      

      XAML 日期选择器代码...

              <DatePicker x:Name="dtpClosedDate"
                      SelectedDate="{Binding ClosedDateDTP, Mode=TwoWay}"
                      HorizontalAlignment="Left"
                      Margin="284,120,0,0"
                      VerticalAlignment="Top">
          </DatePicker>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        • 2018-08-26
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        • 2012-03-04
        相关资源
        最近更新 更多