2012-05-08 94 views
3

我有一个DatePicker定义如下:Silverlight的SDK日期选择器选择日期不进行重置到今天

<sdk:DatePicker x:Name="dtpStartDate" 
       Grid.Row="4" 
       Grid.Column="1" 
       SelectedDateFormat="Short" 
       SelectedDate="{Binding MyObject.StartDate, Mode=TwoWay, NotifyOnValidationError=True}"/> 

MyObject是包含被定义为可空DateTimeStartDate类。

class MyObjectClass 
{ 
    .... 
    public DateTime? StartDate { get; set; } 
    .... 
} 

我正在使用MVVM(通过棱镜)和MyObject被正确绑定。

我第一次显示这个视图时,日期是空白的(如预期的那样),当我点击选择器时,日历显示,今天的日期高亮显示。

如果我选择一个日期(今天除外),或显示与填充然后当我的空白表单创建一个新的对象日的记录:

this.MyObject = new MyObjectClass(); 

日在突出显示,当我点击选择器是之前选择的日期。

因此,如果记录显示“2009年5月1日”,这将在选取器中突出显示。我可以将StartDate设置为DateTime.Today这是正确显示,但确实意味着日期显示在我不想要的形式。

那么,为什么不将日期设置为空将选择器中的选定日期重置为今天?

回答

1

的解决方案是将DisplayDate属性重置的DatePicker

 this.SelectedDateChanged += (s, e) => 
     { 
      if (this.SelectedDate == null) 
      { 
       this.DisplayDate = DateTime.Today; 
       this.Text = string.Empty; 
      } 
     }; 

要添加此功能,我们必须继承的DataPicker虽然。

0

不确定您是否刚刚将此问题留在您的问题中,但如果您希望程序化更改显示在UI上,则您的ViewModel和MyObjectClass应实现INotifyPropertyChanged。特别是,VM的MyObject属性和MyObjectClass StartDate属性设置器应该触发PropertyChanged事件。

+0

是的 - 我刚刚离开了它。一切都实现了'INotifyPropertyChanged'。正如我所说的将开始日期设置为'Today'正确更新它。 – ChrisF

相关问题