3

我对 a 有以下定义DatePicker

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

MyObject是一个包含StartDate被定义为 nullable的类DateTime

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

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

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

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

this.MyObject = new MyObjectClass();

单击选择器时突出显示的日期是先前选择的日期。

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

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

4

2 回答 2

1

解决方案是重置DisplayDate属性DatePicker

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

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

于 2012-09-13T11:55:07.680 回答
0

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

于 2012-05-15T18:51:01.337 回答