3

a に対して次の定義がありますDatePicker

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

MyObjectStartDatenullable として定義されているを含むクラスですDateTime

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

私は(Prism経由で)MVVMを使用しており、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 に答える