Я пытаюсь прослушать клавишу Enter в управлении календарем через MVVM.Я могу слушать любую другую клавишу, но по какой-то причине не могу войти.Использование кода позади не является решением, так как я хочу связать команду с ViewModel… поэтому, пожалуйста, обработка PreviewKeyDown не сработает.
Это в представлении:
<Calendar SelectionMode="SingleRange">
<Calendar.InputBindings>
<KeyBinding Key="Return"
Command="{Binding CloseCalendarCommand}" />
<KeyBinding Key="Esc"
Command="{Binding CloseCalendarCommand}" />
</Calendar.InputBindings>
</Calendar>
Клавиша Escapeработает нормально и вызывает CloseCalendarCommand.Клавиша ввода не запускает команду.До MVVM я использовал PreviewKeyDown = "FilterCalendar_PreviewKeyDown" для обработки клавиши ввода ...
private void FilterCalendar_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
e.Handled = true;
CalendarPopup.IsPopupOpen = false;
}
}
, но это идет вразрез с концепцией MVVM, и я хочу сделать другие вещи в viewModel после закрытия всплывающего окна календаря, чтоЯ не могу из кода позади.
В модели представления я использую Команды Prism:
CloseCalendarCommand = new DelegateCommand(OnCloseCalendarCommand);
private void OnCloseCalendarCommand()
{
IsCalendarVisible = false;
...
}
public ICommand CloseCalendarCommand { get; }