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

use*_*465 6 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();   
}  
Run Code Online (Sandbox Code Playgroud)

艾森伯格先生然后写道:

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

这就是我所拥有的:

protected override void OnViewLoaded(object view)
{
    base.OnViewLoaded(view);
    MessageBox.Show("OnPageTwoViewLoaded");
}
Run Code Online (Sandbox Code Playgroud)

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

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

Kje*_*sen 2

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