【发布时间】:2016-12-12 14:01:01
【问题描述】:
当想用this.TryClose() 关闭屏幕(MyViewModel)时,Caliburn 会记录它被停用和关闭:
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();
它会正确关闭。
那么,即使 Caliburn 说它正在关闭屏幕,在其类中使用 this.TryClose() 时,屏幕怎么可能不会关闭。但是当试图从指挥类中关闭它时它会正确关闭?
有趣的是,我有另一个 ViewModel 具有完全相同的代码,并且它可以按预期工作。
注意:
在MyViewModel 类中,我在OnActivate() 方法中调用this.TryClose():
protected override void OnActivate()
{
base.OnActivate();
// do some stuff
this.TryClose();
}
所以基本上屏幕应该会立即弹出并关闭。
另一个注意事项:
当我在MyViewModel 中调用this.TryClose() 之后尝试在指挥中调用ActiveItem.TryClose() 时,指挥中的调用也停止工作,来自Caliburn 的日志消息:
Caliburn INFO:[2016-12-12T14:57:11.9553219+01:00] TryClose 需要父 IConductor 或具有 Close 方法或 IsOpen 属性的视图。
【问题讨论】:
标签: c# wpf caliburn.micro