绑定日期到DatePicker在UWP中不起作用

时间:2018-02-08 13:45:53

标签: c# xaml datepicker uwp

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

1 个答案:

答案 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事件,因为幕后数据绑定会观察到此事件。