当前位置: 首页 > 编程语言 > C#

如何在MVVMWPF应用程序中取消窗口关闭Share

时间:2023-04-10 21:30:00 C#

MVVMWPF应用程序WPF中如何取消窗口关闭:ViewModel:publicclassMyViewModel:Screen{privateCancelCommandcancelCommand;publicCancelCommandCancelCommand{get{returncancelCommand;}}publicMyViewModel(){cancelCommand=newCancelCommand(this);}}publicclassCancelCommand:ICommand{publicCancelCommand(MyViewModelviewModel){this.viewModel=viewModel;}publicoverridevoidExecute(objectparameter){if(true){//这里是一个真实的条件);if(messageBoxResult==MessageBoxResult.No){返回;}}viewModel.TryClose(false);}publicoverrideboolCanExecute(objectparameter){returntrue;当前代码不起作用。如果在弹出对话框中选择“否”,我希望用户留在当前表单上。此外,覆盖CanExecute也无济于事。它只是禁用按钮。我想让用户点击一个按钮,然后通知他/她数据将会丢失。也许我应该在按钮上分配一个事件监听器?编辑:我在“取消”按钮上设置了弹出窗口。但我仍然无法管理Esc或X按钮(右上角)。我似乎对“取消”按钮感到困惑,因为当我单击X按钮或Esc时会执行Execute方法。EDIT2:我改变了问题。这是'如何取消取消按钮'。然而,这不是我想要的。我需要取消Esc或X按钮。在“MyViewModel”中,我添加:protectedoverridevoidOnViewAttached(对象视图,对象上下文){base.OnViewAttached(视图,上下文);(作为MyView查看).Closing+=MyViewModel_Closing;}voidMyViewModel_Closing(objectsender,System.ComponentModel.CancelEventArgse){if(true){MessageBoxResultmessageBoxResult=System.Windows.MessageBox.Show("真的关闭了吗?","警告",System.Windows.MessageBoxButton.YesNo);if(messageBoxResult==MessageBoxResult.No){e.Cancel=true;这解决了我的问题。但是,我需要ICommand了解单击了哪个按钮,保存或取消。有没有办法消除事件的使用?您正在尝试在ViewModel类中执行View的工作。让您的View类处理结束请求以及是否应取消请求。要取消关闭窗口,您可以订阅Closing事件视图并在显示MessageBox后将CancelEventArgs.Cancel设置为true。下面是一个例子:代码背后:以上是C#学习教程:MVVMWPF应用程序中如何取消关闭窗口的所有内容分享,如果对大家有用需要详细了解C#学习教程,希望大家多多关注——privatevoidOnClosing(objectsender,CancelEventArgse){MessageBoxResultresult=MessageBox.Show("真的关闭了吗?","Warning",MessageBoxButton.YesNo);如果(结果!=MessageBoxResult.Yes){e.Cancel=true;}boolshouldClose=((MyViewModel)DataContext).TryClose(false);如果(!shouldClose){e.Cancel=true;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: