Caliburn.Micro - 当视图变得可见时做某事

时间:2011-10-28 16:48:42

标签: wpf caliburn.micro

我目前正在进入WPF和Caliburn.Micro,现在没有像MEF或Autofac这样的东西。

现在我正试图在视图变得可见之后立即在视图模型中执行一些代码。

在相关教程中,此代码在显示视图之前显示消息框:

protected override void OnActivate() 
{   
    MessageBox.Show("Page Two Activated"); //Don't do this in a real VM.   
    base.OnActivate();   
}  

先生。艾森伯格然后写道:

  

请记住,如果您有任何依赖于的激活逻辑   视图已加载,您应该重写Screen.OnViewLoaded   而不是/与OnActivate结合使用。

这就是我所拥有的:

protected override void OnViewLoaded(object view)
{
    base.OnViewLoaded(view);
    MessageBox.Show("OnPageTwoViewLoaded");
}

我也通过Grid EventTrigger和cal:ActionMessage尝试了它。 但在所有三种情况下,MessageBox在视图可见之前出现。

当然我错过了什么,我做错了什么?

1 个答案:

答案 0 :(得分:2)

也许不是最优雅的解决方案,但我想你可以从代码隐藏中做到这一点,因为 - 严格来说 - 这是你在这里尝试做的非常看/ gui特定的事情。例如在OnInitialized或OnRender中。如果您为视图提供对EventAggregator的引用,您可以引发一个事件并创建视图模型 - 或者您想要的任何类,订阅此事件并执行此操作。或者在显示MessageBox的情况下,除了View之外,你真的不会有任何其他地方。