我正在尝试通过MVVM监听日历控件中的Enter键。由于某种原因,我能够收听其他任何键,但无法听回车键。后面使用代码不是解决方案,因为我想使用ViewModel进行命令绑定…所以请不要使用PreviewKeyDown。
这在视图中:
<Calendar SelectionMode="SingleRange">
<Calendar.InputBindings>
<KeyBinding Key="Return"
Command="{Binding CloseCalendarCommand}" />
<KeyBinding Key="Esc"
Command="{Binding CloseCalendarCommand}" />
</Calendar.InputBindings>
</Calendar>
Escape键可以正常工作,并触发CloseCalendarCommand。 Enter键不会触发命令。在MVVM之前,我使用PreviewKeyDown =“ FilterCalendar_PreviewKeyDown”处理Enter键...
private void FilterCalendar_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
e.Handled = true;
CalendarPopup.IsPopupOpen = false;
}
}
但是这与MVVM概念背道而驰,一旦日历弹出窗口关闭,我想在viewModel中做其他事情,我无法从后面的代码中获取
。在视图模型中,我正在使用棱镜命令:
CloseCalendarCommand = new DelegateCommand(OnCloseCalendarCommand);
private void OnCloseCalendarCommand()
{
IsCalendarVisible = false;
...
}
public ICommand CloseCalendarCommand { get; }