关闭+ =(s,e)=>

时间:2019-04-30 07:16:38

标签: c# .net wpf mvvm

如何使用Windows X(关闭)按钮处理关闭事件? (带有“是/否问题”的消息框)

public MainWindow()
{
    // some other code
    Closing += (s, e) => ViewModelLocator.Cleanup();
}

实际上,我了解到Closing += (s,e)调用ViewModelLocator.Cleanup()来处理实例的注销,但是我想做的是单击消息框的"No"按钮时取消关闭事件出现。

2 个答案:

答案 0 :(得分:0)

从技术角度来看,这是一个lambda expression,带有s和e作为参数。由于e是FormClosingEventArgs,因此您可以决定是否使用

关闭表单
e.Cancel = false;

e.Cancel = true;

答案 1 :(得分:0)

Closing是一个事件,可以订阅。订阅事件是指指定事件发生时应采取的操作。

Closing事件是不言自明的,并且在关闭窗口时会引发该事件。

预订一个事件,换句话说,意味着您只是“告诉”应该执行什么方法。所述方法应匹配委托,即

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
   ...
}

其中Window_Closing只是约定{object name}_{event name}的方法名称。

相反,您可以像您发布的那样传递与所述委托人匹配的lambda表达式。

您提供的代码如下:

Closing += (s, e) => ViewModelLocator.Cleanup();

只是订阅一个事件。方法只是方法调用ViewModelLocator.Cleanup();之一。

如果您需要在该事件上显示消息框,则只需编写您的方法(我将继续使用lambda表达式的示例):

Closing += (s, e) => 
{
  var result = MessageBox.Show("Do you really want to close?", MessageBoxButton.YesNo);
  e.Cancel = result != MessageBoxresult.Yes;

  if(!e.Cancel)
    ViewModelLocator.Cleanup();
};