WPF MVVM取消Window.Closing事件
发布时间:2020-12-14 04:20:34 所属栏目:Windows 来源:网络整理
导读:在 WPF应用程序和MVVMLight Toolkit中,我想看看你的意见,如果我需要取消Window Close事件,最好的方法是什么. 在Window.Closing事件中,我可以设置e.Cancel = true,这可以防止关闭表单.要确定是否允许Close,或者应该阻止Close是否在ViewModel上下文中. 一个解
在
WPF应用程序和MVVMLight Toolkit中,我想看看你的意见,如果我需要取消Window Close事件,最好的方法是什么.
在Window.Closing事件中,我可以设置e.Cancel = true,这可以防止关闭表单.要确定是否允许Close,或者应该阻止Close是否在ViewModel上下文中. 一个解决方案可能是如果我定义一个Application变量,我可以在后面的视图代码中的普通事件处理程序中查询它? 谢谢
使用MVVM Light,您获得了EventToCommand:
因此,您可以在xaml中将关闭事件连接到VM. <Window ... xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:command="http://www.galasoft.ch/mvvmlight"> <i:Interaction.Triggers> <i:EventTrigger EventName="Closing"> <command:EventToCommand Command="{Binding ClosingCommand}" PassEventArgsToCommand="True" /> </i:EventTrigger> </i:Interaction.Triggers> 在VM中: public RelayCommand<CancelEventArgs> ClosingCommand { get; private set; } ctor() { ClosingCommand = new RelayCommand<CancelEventArgs>(args => args.Cancel = true); } 如果您不想将CancelEventArgs传递给VM: 您可以始终使用类似的方法使用行为,并使用VM中的简单bool(将此bool绑定到行为)以指示应取消关闭事件. 更新: Download Link for following example 要使用行为执行此操作,您可以使用以下行为: internal class CancelCloseWindowBehavior : Behavior<Window> { public static readonly DependencyProperty CancelCloseProperty = DependencyProperty.Register("CancelClose",typeof(bool),typeof(CancelCloseWindowBehavior),new FrameworkPropertyMetadata(false)); public bool CancelClose { get { return (bool) GetValue(CancelCloseProperty); } set { SetValue(CancelCloseProperty,value); } } protected override void OnAttached() { AssociatedObject.Closing += (sender,args) => args.Cancel = CancelClose; } } 现在在xaml: <i:Interaction.Behaviors> <local:CancelCloseWindowBehavior CancelClose="{Binding CancelClose}" /> </i:Interaction.Behaviors> 其中CancelClose是来自VM的bool属性,指示是否应取消Closing事件.在附带的示例中,我有一个Button可以从VM切换此bool,以便您测试行为 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-8 – 您的开发人员许可证已过期(Windows 8)
- 在WPF全屏应用程序中禁用虚拟触摸屏Windows键盘
- APC Injection of Windows 7 x86 in R0
- windows-server-2008-r2 – 文件夹重定向DFS慢
- Windows – IIS 7.5 – 无法在一个IP地址下配置两个SSL证书
- windows – Delphi交叉编译器为linux
- Windows中的signal.alarm替换[Python]
- 外部用户能够给Exchange通讯组发送邮件排错分析
- window.open浏览器弹出新窗口被拦截—原因分析和解决方案
- Windows Server 2016-WinSer 2016标准版与数据中心版的区别