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 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
在关闭后使用,这就是我将其公开的原因。如前所述,这不会直接检测关闭方法,但它确实允许我检测表单是否被主动提交,这足以满足我的需求。
如果有更好的方法,我仍然希望看到其他答案:-)
推荐阅读
- c# - 如何修复来自 Microsoft Azure 计算机视觉服务的 400 响应传入
- python - 如何将动态值与 CNN 中的 flatten 向量连接起来
- elasticsearch - 基于字符串的数字接近程度的弹性搜索评分文档
- python - 如何在时间戳上正确使用 group-by?
- algorithm - 查找数组中元素总和等于 0 的对数
- python - Python-Pandas 不会读取整个 csv
- node.js - 找不到 id 并更新和增加子文档 - 返回 null Mongoose/mongoDB
- java - 使用 Spring boot 和 HttpServletResponse 下载 utf-8 编码的 csv 文件的问题
- java - 如何在低于 21 的 android api 级别上修复 java.lang.NoClassDefFoundError?
- c++ - 转换对象的地址