如何使用 Caliburn Micro 检测 window close 方法
How to detect window close method with Caliburn Micro
使用 Caliburn Micro 时,是否可以检测 window 是如何关闭的? IE。是通过TryClose()
关闭还是通过window右上角的叉号关闭?
基于this post,我找到了一种方法来捕捉平仓,使用下面的代码,但我似乎找不到任何表明平仓是如何启动的属性?
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);
}
我找到了解决方法,我认为它很简单。但严格来说这不是如何检测关闭方法的答案。尽管如此,它可能还是有用的...
第 1 步: 在视图模型的某处添加一个布尔值(并确保默认为 false
)
public bool IsSubmitted { get; private set; } = false;
第二步:提交时更改布尔值
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
}
}
收盘后也可以用IsSubmitted
,所以我才做成public。如前所述,这不会直接检测关闭方法,但它确实允许我检测表单是否被主动提交,这足以满足我的需要。
如果有更好的方法,我仍然很想看到其他答案:-)
使用 Caliburn Micro 时,是否可以检测 window 是如何关闭的? IE。是通过TryClose()
关闭还是通过window右上角的叉号关闭?
基于this post,我找到了一种方法来捕捉平仓,使用下面的代码,但我似乎找不到任何表明平仓是如何启动的属性?
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);
}
我找到了解决方法,我认为它很简单。但严格来说这不是如何检测关闭方法的答案。尽管如此,它可能还是有用的...
第 1 步: 在视图模型的某处添加一个布尔值(并确保默认为 false
)
public bool IsSubmitted { get; private set; } = false;
第二步:提交时更改布尔值
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
}
}
收盘后也可以用IsSubmitted
,所以我才做成public。如前所述,这不会直接检测关闭方法,但它确实允许我检测表单是否被主动提交,这足以满足我的需要。
如果有更好的方法,我仍然很想看到其他答案:-)