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