Исходный вариант использования:
Это возможный вариант использования, который я пытаюсь решить:
- Пользователь открывает страницу с моим календаремустановить текущую дату
- Пользователь выбирает дату несколько месяцев назад
- Пользователь обновляет страницу, в результате чего выбранная дата в виртуальной машине сбрасывается на текущую дату
Ожидается: В календаре отображается текущая дата
Факт: (с привязкой только для SelectedDate) Календарь перемещает только выбранную дату, но продолжает отображатьранее выбранный месяц
Мое решение:
В сценарии MVVM я показываю элемент управления Calendar
, у которого SelectedDate имеет привязку к свойству SelectedDate
в моем ViewModel,Свойство в моей виртуальной машине запускает событие PropertyChanged
, когда оно установлено.
Выбранную дату в моей виртуальной машине можно также установить из других частей моего кода, поэтому я хочу, чтобы в моем календаре всегда отображалась выбранная дата (дляНапример, когда другой месяц установлен в качестве выбранной даты, я хочу, чтобы мой календарь переключился на этот месяц).Чтобы получить такое поведение, я также связал свойство DisplayDate
моего календаря со своим свойством SelectedDate, и это дает мне ожидаемое поведение, за исключением случаев, когда я нажимаю на серые даты предыдущего или следующего месяца.
Этомой календарь в XAML:
<Calendar SelectedDate="{Binding Path=SelectedDate}" DisplayDate="{Binding Path=SelectedDate}" />
Это свойство SelectedDate
в моей ViewModel (реализует INotifyPropertyChanged
)
public DateTime SelectedDate
{
get
{
return selectedDate;
}
set
{
selectedDate = value;
this.PropertyChanged(this, new PropertyChangedEventArgs("SelectedDate"));
}
}
Проблема с решением:
Видимо, нажатие на серую дату приводит к тому, что SelectedDate
устанавливается при наведении мыши, а затем при наведении мыши вверх, что приводит к выбору даты через два месяца.
Есть лилучший способ реализовать такое поведение?Или я могу исправить проблему DisplayDate (без слишком большого взлома, то есть не иметь / как можно меньше кода в коде позади)?
Все, что мне действительно нужно, это свойство SelecteDate
, которое также имеет поведение DisplayDate
property:)
Спасибо за помощь!