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

时间:2012-06-21 21:23:33

标签: c# wpf datetime data-binding datepicker

我有一个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));

3 个答案:

答案 0 :(得分:6)

可能有助于使用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");
        }
    }
}

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我遇到了与datepicker具有null值的绑定date属性相同的问题。无论我尝试什么,显示的值是01/01/0001。我最后通过将第二个属性设置为特定于绑定到xaml datepicker的字符串来修复此问题,如果我的日期为null,则返回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 code ...

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