即使Caliburn说它已停用并关闭,屏幕也不会关闭

时间:2016-12-12 14:01:02

标签: c# wpf caliburn.micro

当使用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属性的视图。

1 个答案:

答案 0 :(得分:1)

显然,激活屏幕后this.TryClose()来电似乎过快。在Task.Delay(50)来电之前加TryClose()时,它可以正常工作 它在其他ViewModel中使用相同代码的原因是代码需要更多时间来执行。

仍然不知道Caliburn行为的确切原因。