wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了WPF MVVM取消Window.Closing事件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

在 WPF应用程序和MVVMLight Toolkit中,我想看看你的意见,如果我需要取消Window Close事件,最好的方法是什么. 在Window.Closing事件中,我可以设置e.Cancel = true,这可以防止关闭表单.要确定是否允许Close,或者应该阻止Close是否在ViewModel上下文中. 一个解决方案可能是如果我定义一个Application变量,我可以在后面的
WPF应用程序和MVVMLight Toolkit中,我想看看你的意见,如果我需要取消Window Close事件,最好的方法是什么.
在Window.Closing事件中,我可以设置e.Cancel = true,这可以防止关闭表单.要确定是否允许Close,或者应该阻止Close是否在viewmodel上下文中.

一个解决方案可能是如果我定义一个Application变量,我可以在后面的视图代码中的普通事件处理程序中查询它?@H_673_17@

谢谢@H_673_17@

使用MVVM Light,您获得了EventToCommand:

因此,您可以在xaml中将关闭事件连接到Vm.@H_673_17@

<Window ...
        xmlns:i="http://scheR_794_11845@as.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中:@H_673_17@

public RelayCommand<CancelEventArgs> ClosingCommand { get; private set; }

ctor() {
  ClosingCommand = new RelayCommand<CancelEventArgs>(args => args.Cancel = truE);
}

如果您不想将CancelEventArgs传递给VM:@H_673_17@

您可以始终使用类似的方法使用行为,并使用VM中的简单bool(将此bool绑定到行为)以指示应取消关闭事件.@H_673_17@

更新:@H_673_17@

Download Link for following example@H_673_17@

要使用行为执行此操作,您可以使用以下行为:@H_673_17@

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:@H_673_17@

<i:Interaction.behaviors>
  <local:CancelCloseWindowBehavior CancelClose="{Binding CancelClosE}" />
</i:Interaction.behaviors>

其中CancelClose是来自VM的bool属性,指示是否应取消Closing事件.在附带的示例中,我有一个Button可以从VM切换此bool,以便您测试行为@H_673_17@

大佬总结

以上是大佬教程为你收集整理的WPF MVVM取消Window.Closing事件全部内容,希望文章能够帮你解决WPF MVVM取消Window.Closing事件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。