【问题标题】:The Silverlight SDK date picker isn't resetting the selected date to todaySilverlight SDK 日期选择器未将所选日期重置为今天
【发布时间】:2012-05-08 13:54:09
【问题描述】:

我对@9​​87654321@ 有以下定义:

<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; }
    ....
}

我正在使用 MVVM(通过 Prism)并且 MyObject 已正确绑定。

我第一次显示此视图时,日期为空白(如预期的那样),当我单击选择器时,日历显示为突出显示今天的日期。

如果我选择一个日期(今天除外)或显示一个填写了日期的记录,那么当我清空表单以创建新对象时:

this.MyObject = new MyObjectClass();

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

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

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

【问题讨论】:

    标签: c# silverlight datepicker


    【解决方案1】:

    解决方法是重置DatePicker上的DisplayDate属性:

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

    要添加这个功能,我们必须继承 DataPicker

    【讨论】:

      【解决方案2】:

      不确定您是否只是在问题中忽略了这一点,但如果您希望在 UI、ViewModel 和 MyObjectClass 上显示编程更改 应该实现 INotifyPropertyChanged。具体来说,VM 的 MyObject 属性和 MyObjectClass StartDate 属性设置器应该触发 PropertyChanged 事件。

      【讨论】:

      • 是的 - 我只是忽略了它。一切都实现了INotifyPropertyChanged。正如我所说,将开始日期设置为 Today 会正确更新它。
      猜你喜欢
      • 2012-10-17
      • 2023-04-05
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多