WPF Datepicker使用MVVM返回先前选择的日期

我正在开发一个WPF项目,我在Window上有一个Datepicker控件。 我正在使用MVVM模式进行数据绑定。 我已经在DateDicker的SelectedDate更改事件上设置了一个命令。 问题是,例如,当我第一次更改日期时,我在命令的事件处理程序中得到NULL 。 当我再次更改日期时,我在事件处理程序中获得先前选择的日期。 这是一种奇怪的行为,因为如果我不使用WPF命令并在模型后面的代码中工作,则不会发生这种情况。

这是我的DatePicker的xaml代码片段:

          

ViewModel类中的命令事件处理程序

 get { return new DelegateCommand((sdate) => { selectedDate = Convert.ToDateTime(sdate); if (sdate != null) { //some logic here } } } set { SelectedDateChangedCommand = value; RaisePropertyChangedEvent("SelectedDateChangedCommand"); } 

DelegateCommand类实现ICommand

因此,在上面的代码中,“ sdate ”参数始终返回先前选择的日期。 如果这是我第一次更改日期,则返回NULL

知道我可能做错了什么吗?

通过将更改绑定到事件和命令,我不确定您要实现的目标。 您是否有理由不绑定DatePicker的SelectedDate属性(使用TwoWay模式)? 目前,您将其绑定到静态DateTime.Today

  

并且在你的ViewModel中有一个

 private Nullable myDateTimeProperty = null; public Nullable MyDateTimeProperty { get { if(myDateTimeProperty == null) { myDateTimeProperty = DateTime.Today; } return myDateTimeProperty; } set { myDateTimeProperty = value; RaisePropertyChangedEvent("MyDateTimeProperty"); } } 

这样,ViewModel将返回当前日期并在DatePicker中设置它,如果之前的日期为null,并且如果更改了DatePicker,它将以新的方式将其绑定回属性。