2

いつDateTime?DateTimePicker コントロールのソースが null に変更され、別の日付を選択したい場合、カレンダーのドロップダウンはデフォルトで選択された最後の月と年になります。

DOB に DateTimePicker を使用しているため、月と年は大きく異なります。データ ソースが null に変更されたときに、カレンダーを現在の月と年にリセットしたいと考えています。WPFToolkit の DateTimePicker はこれを行いますが、スピナーや時間の選択が必要なく、それらを非表示にする手段が見つかりません。

私は MVVM デザイン パターンを使用しており、即時の分離コードを回避したいと考えています。

ビューからの XAML:

<DatePicker Height="25" HorizontalAlignment="Left" Margin="53,47,0,0" 
    Name="dpEventDate" VerticalAlignment="Top" Width="115" 
    SelectedDate="{Binding EventItem.BirthDate, Mode=TwoWay, 
    UpdateSourceTrigger=PropertyChanged}" />

ビューモデルからのC#:(イベントはモデルで作成したクラスです)

private Event _eventItem;

public event PropertyChangedEventHandler PropertyChanged;
public RelayCommand CreateCommand { get; private set; }

public Event EventItem
{
    get { return _eventItem; }
    set { _eventItem = value; OnPropertyChanged("EventItem"); }
}

public MainViewModel()
{
    EventItem = new Event();
    CreateCommand = new RelayCommand(CreateEvent);
}

protected void OnPropertyChanged(string name)
{
    PropertyChangedEventHandler handler = PropertyChanged;

    if (handler != null)
    {
        handler(this, new PropertyChangedEventArgs(name));
    }
}

あなたが私を助けるのを助けるために私が提供できる詳細が他にある場合は、私に知らせてください.

4

1 に答える 1

1

Adam の提案に従って、DateTimePicker のカレンダー表示をリセットするのに役立ったビュー モデルのコードを次に示します。

private Event _eventItem;
private DateTime? _viewDate;

public event PropertyChangedEventHandler PropertyChanged;
public RelayCommand CreateCommand { get; private set; }

public Event EventItem
{
    get { return _eventItem; }
    set { _eventItem = value; OnPropertyChanged("EventItem"); }
}

// Decoy DateTime property
public DateTime? ViewDate
{
    get { return _viewDate; }
    set
    { 
        _viewDate = value;
        EventItem.EventDate = _viewDate; // Update the source

        OnPropertyChanged("ViewDate");
    }
}

public MainViewModel()
{
    EventItem = new Event();
    CreateCommand = new RelayCommand(CreateEvent);
}

private void CreateEvent()
{
    ViewDate = DateTime.Today; // Important for resetting the calendar display
    // Save input and set EventItem to new event for a clean slate
}

protected void OnPropertyChanged(string name)
{
    PropertyChangedEventHandler handler = PropertyChanged;

    if (handler != null)
    {
        handler(this, new PropertyChangedEventArgs(name));
    }

    // Important if you want your DatePicker control to be empty
    if(name.Equals("ViewDate") && DateTime.Today.Equals(ViewDate))
    {
        ViewDate = null;
    }
}
于 2012-05-18T15:34:40.093 に答える