我对DatePicker
有以下定义:
<sdk:DatePicker x:Name="dtpStartDate"
Grid.Row="4"
Grid.Column="1"
SelectedDateFormat="Short"
SelectedDate="{Binding MyObject.StartDate, Mode=TwoWay, NotifyOnValidationError=True}"/>
MyObject
是一个包含StartDate
的类,该DateTime
被定义为可为空的class MyObjectClass
{
....
public DateTime? StartDate { get; set; }
....
}
。
MyObject
我正在使用MVVM(通过Prism)并且this.MyObject = new MyObjectClass();
被正确绑定。
我第一次显示此视图时,日期为空白(正如预期的那样),当我点击选择器时,日历会显示,今天的日期会突出显示。
如果我选择一个日期(今天除外)或显示填写日期的记录,那么当我将表单空白以创建新对象时:
StartDate
点击选择器时突出显示的日期是之前选择的日期。
因此,如果记录显示“2009年5月1日”,这将是选择器中突出显示的内容。我可以将DateTime.Today
设置为正确显示的{{1}},但这意味着日期会以我不想要的形式显示。
那么,为什么不将日期设置为null将选择器中的选定日期重置为今天?
答案 0 :(得分:1)
解决方案是重置DisplayDate
上的DatePicker
属性:
this.SelectedDateChanged += (s, e) =>
{
if (this.SelectedDate == null)
{
this.DisplayDate = DateTime.Today;
this.Text = string.Empty;
}
};
要添加此功能,我们必须继承DataPicker
。
答案 1 :(得分:0)
不确定您是否刚从问题中解决了这个问题,但是如果您希望在UI上显示程序化更改,那么您的ViewModel和MyObjectClass 应该实现INotifyPropertyChanged。具体来说,VM的MyObject属性和MyObjectClass StartDate属性setter应该触发PropertyChanged事件。