我有一个DateTime数据类型变量,它绑定到一个datepicker。
DatePicker XAML:
<CalendarDatePicker Name="dpDate" VerticalAlignment="Center"
Date="{Binding dpDateTime, ElementName=this, Mode=TwoWay}"
DateChanged="dp_DateChanged">
</CalendarDatePicker>
代码隐藏,设置值:
dpDatetime = DateTime.Now;
但是,datepicker没有选择当前选择日期的日期为1/1/1917
答案 0 :(得分:1)
问题是您设置的日期属于DateTime
类型,而日历需要DateTimeOffset
。
您可以通过将dpDateTime
属性的类型更改为DateTimeOffset
来轻松解决此问题。
总体而言,最好在任何地方使用DateTimeOffset
代替DateTime
,因为它包含时区信息,可在用户的时区发生变化时使代码更可靠。
INotifyPropertyChanged
此外,您必须实现INotifyPropertyChanged
,以便将值更改通知给数据绑定。首先,您必须在类中添加实现INotifyPropertyChanged
接口:
public class Page : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
// This method is called by the Set accessor of each property.
// The CallerMemberName attribute that is applied to the optional propertyName
// parameter causes the property name of the caller to be substituted as an argument.
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
...
}
然后更新属性设置器以使用setter:
private DateTimeOffset _dpDateTime = DateTime.Now;
public DateTimeOffset dpDateTime
{
get { return _dpDateTime; }
set
{
_dpDateTime = value;
NotifyPropertyChanged();
}
}
数据绑定功能要求目标属性引发PropertyChanged
事件,因为幕后数据绑定会观察到此事件。