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,它将以新的方式将其绑定回属性。