日期时间选取器日历默认为所选的上个月/年
本文关键字:上个月 选取 时间 日历 默认 日期 | 更新日期: 2023-09-27 18:34:32
当我的日期时间选择器控件的日期时间?源更改为空并且我想选择另一个日期时,日历下拉列表默认为所选的最后一个月和去年。
我正在使用 DOB 的日期时间选择器,因此月份和年份会有很大差异,我宁愿在数据源更改为 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));
}
}
如果还有我可以提供的细节来帮助您帮助我,请告诉我。
根据亚当的建议,以下是视图模型中帮助我重置日期时间选择器的日历显示的代码:
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;
}
}