当使用MyViewModel
Caliburn日志关闭屏幕(this.TryClose()
)本身时,它会被取消激活并关闭:
Caliburn信息:[2016-12-12T14:43:05.4275321 + 01:00]停用MyViewModel。
Caliburn信息:[2016-12-12T14:43:05.4275321 + 01:00]关闭MyViewModel。
但屏幕没有关闭。它仍在那里,我甚至可以与它上面的按钮互动。
屏幕在导体类内激活:
public class ShellViewModel : Conductor<Screen>.Collection.OneActive
{
// [...]
ChangeActiveItem(new MyViewModel(), false);
// [...]
}
当我现在尝试从导体类关闭活动屏幕(此时为MyViewModel
)时:
ActiveItem.TryClose();
它正确关闭。
那么在类中使用this.TryClose()
时屏幕怎么可能无法关闭,即使Caliburn说它正在关闭屏幕。但是当它试图从导体类中关闭它时,它会被正确关闭吗?
有趣的是,我有另一个具有完全相同代码的ViewModel,并且它按预期工作。
注意:
在MyViewModel
课程中,我在this.TryClose()
方法中调用了OnActivate()
:
protected override void OnActivate()
{
base.OnActivate();
// do some stuff
this.TryClose();
}
所以基本上屏幕应该立即弹出并关闭。
另一个注意事项:
当我在ActiveItem.TryClose()
中调用this.TryClose()
之后尝试在导体中呼叫MyViewModel
时,导体中的呼叫也会停止工作,并且来自Caliburn的记录消息:
Caliburn信息:[2016-12-12T14:57:11.9553219 + 01:00] TryClose需要父IConductor或具有Close方法或IsOpen属性的视图。
答案 0 :(得分:1)
显然,激活屏幕后this.TryClose()
来电似乎过快。在Task.Delay(50)
来电之前加TryClose()
时,它可以正常工作
它在其他ViewModel中使用相同代码的原因是代码需要更多时间来执行。
仍然不知道Caliburn行为的确切原因。