C# 如何用Caliburn Micro检测窗口关闭方法

C# 如何用Caliburn Micro检测窗口关闭方法,c#,caliburn.micro,C#,Caliburn.micro,当使用Caliburn Micro时,是否可以检测窗口是如何关闭的?即,是否通过TryClose()或通过窗口右上角的十字架关闭 基于此,我已经找到了一种方法,甚至可以使用下面的代码捕获关闭,但是我似乎找不到任何属性来指示关闭是如何启动的 public override void CanClose(Action<bool> callback) { // Only do this, if closed via the cross in the upper right corn

当使用Caliburn Micro时,是否可以检测窗口是如何关闭的?即,是否通过
TryClose()
或通过窗口右上角的十字架关闭

基于此,我已经找到了一种方法,甚至可以使用下面的代码捕获关闭,但是我似乎找不到任何属性来指示关闭是如何启动的

public override void CanClose(Action<bool> callback) 
{
    // Only do this, if closed via the cross in the upper right corner of the window
    callback(false);
}
public override void CanClose(操作回调)
{
//仅当通过车窗右上角的十字关闭时才执行此操作
回调(假);
}

我找到了一个解决办法,我认为这很简单。但严格地说,这并不是如何检测关闭方法的答案。尽管如此,它可能还是有用的

步骤1:在视图模型中的某处添加一个布尔值(并通过defaut确保它是
false

步骤2:提交时更改布尔值

public void SubmitForm() 
{
    IsSubmitted = true; // This is the only place this property will be changed
    // ...maybe do some more stuff?
    TryClose();
}
步骤3:覆盖视图模型中的
CanClose()
方法

public override void CanClose(Action<bool> callback) 
{
    if (IsSubmitted == false) 
    {
        callback(false); // Cancels the close
    }
}
public override void CanClose(操作回调)
{
if(IsSubmitted==false)
{
回调(false);//取消关闭
}
}
您还可以在结束后使用
IsSubmitted
,这就是我将其公开的原因。如前所述,这不会直接检测关闭方法,但它确实允许我检测表单是否已主动提交,这足以满足我的需要

如果有更好的方法,我仍然希望看到其他答案:-)

public override void CanClose(Action<bool> callback) 
{
    if (IsSubmitted == false) 
    {
        callback(false); // Cancels the close
    }
}