DatePicker 数据绑定将默认值设置为 1/1/0001 WPF c#

Posted

技术标签:

【中文标题】DatePicker 数据绑定将默认值设置为 1/1/0001 WPF c#【英文标题】:DatePicker databinding sets default value to 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));

【问题讨论】:

【参考方案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>

【讨论】:

以上是关于DatePicker 数据绑定将默认值设置为 1/1/0001 WPF c#的主要内容,如果未能解决你的问题,请参考以下文章

ReactJS + Material-UI:如何使用 Material-UI 的 <DatePicker> 将当前日期设置为默认值?

抛出错误 RangeError:将自定义日期设置为 react-datepicker 的 DatePicker 时时间值无效

iview组件DatePicker type="datetimerange绑定初始默认时间值

在jQuery UI datepicker中将今天的日期设置为默认日期[重复]

DatePicker.Value.Set 绑定到数据源的错误

如何使用 Access VBA 将具有默认值的未绑定文本框的值设置为空字符串