如果用户尝试通过键盘或鼠标选中/取消选中复选框,如何采取措施?

时间:2012-06-07 15:46:41

标签: wpf mvvm checkbox

我正在编写一个应用程序(WPF MVVM),我需要提示用户每当他试图取消/取消选中某个复选框(和其他控件但我会专注于此帖子的复选框)。 我需要他通过MessageBox确认他是否要继续执行复选框启动的操作,我已将MessageBox问题放入PreviewMouseLeftButtonDown事件中,但刚才有人告诉我:如果他们使用键盘检查/取消选中该怎么办?

是否有模拟键盘事件我可以挂钩到我已经拥有的PreviewMouseLeftButtonDown事件的代码,所以只要他们选中/取消选中复选框就会显示提示?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

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

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

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

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