我正在编写一个应用程序(WPF MVVM),我需要提示用户每当他试图取消/取消选中某个复选框(和其他控件但我会专注于此帖子的复选框)。 我需要他通过MessageBox确认他是否要继续执行复选框启动的操作,我已将MessageBox问题放入PreviewMouseLeftButtonDown事件中,但刚才有人告诉我:如果他们使用键盘检查/取消选中该怎么办?
是否有模拟键盘事件我可以挂钩到我已经拥有的PreviewMouseLeftButtonDown事件的代码,所以只要他们选中/取消选中复选框就会显示提示?
答案 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
可以替换为您可能想要捕获或删除的任何内容。