2

我正在编写一个应用程序(WPF MVVM),每当用户尝试检查/取消选中某些复选框(以及其他控件,但我将专注于这篇文章的复选框)时,我都需要提示用户。我需要他通过 MessageBox 确认他是否要继续由复选框启动的操作,我已经在 PreviewMouseLeftButtonDown 事件中提出了 MessageBox 问题,但刚才有人告诉我:如果他们使用键盘选中/取消选中会怎样?

是否有一个模拟键盘事件可以连接到我已经拥有的 PreviewMouseLeftButtonDown 事件代码,以便在他们选中/取消选中复选框时显示提示?

4

2 回答 2

3

鉴于您使用的是 MVVM,我建议您在 ViewModel (VM) 类中处理此问题。

  • 将 CheckBox 控件上的 IsChecked 属性绑定到 VM 上的属性。

  • 在 VM 中,设置验证检查值的逻辑。您不会希望直接从 VM 打开消息框(这会将 VM 直接绑定到可视化服务)。我建议创建一个查询服务(作为 C# 接口)并使用显示 MessageBox 的代码来实现它。将服务传递给 VM 的构造函数,或者让 VM 通过容器(依赖注入或全局服务容器)获取服务。

  • 如果查询失败,请不要更改 VM 中的值。视图中的 CheckBox 将保持其先前的状态。

于 2012-06-07T15:57:29.107 回答
1

控件上有一个 PreviewKeyDown/KeyUp 事件,您可以将其附加ICommand到(对于 MVVM 样式)或在事件后面连接代码(对于非 MVVM)。

然后该事件可以显示消息框,如果需要,您可以使用以下方法取消操作:

if(e.Key == Key.Space)
{
    //TODO: processing for message box
    e.Handled = True
}

以上将事件链标记为已处理,因此管道中的其他事件不会被执行。

请注意,Key.Space如果要捕获所有内容,可以将其替换为您可能想要捕获或删除的任何内容。

于 2012-06-07T18:34:06.483 回答