我目前正在进入WPF和Caliburn.Micro,目前没有像MEF或Autofac这样的东西。Caliburn.Micro - 当视图变得可见时做某些事情
现在我试图在视图变为可见状态后立即在viewmodel中执行一些代码。
在相关教程这个代码显示显示视图之前一个消息:
protected override void OnActivate()
{
MessageBox.Show("Page Two Activated"); //Don't do this in a real VM.
base.OnActivate();
}
艾森伯格先生则写道的:
请记住,如果您有任何激活逻辑是取决于已加载的 视图,您应该覆盖Screen.OnViewLoaded 而不是/结合OnActivate。
这是我有:ActionMessage的:
protected override void OnViewLoaded(object view)
{
base.OnViewLoaded(view);
MessageBox.Show("OnPageTwoViewLoaded");
}
我还通过网格EventTrigger和CAL试了一下。 但是在所有三种情况下,MessageBox在视图可见之前出现。
当然,我错过了什么,我做错了什么?
C.M在您实际在屏幕上看到它们之前创建您的视图实例。 (也就是说,C.M不会延迟加载这些)因此,在您实际查看视图之前,将运行OnViewLoaded代码。我认为OnActivate应该是它的正确位置,而不是OnViewLoaded。 您是否尝试过沙盒这种特殊行为? – EtherDragon
感谢您的回答。我不知道你是什么意思的沙盒,但如果我把OnActivate中的MessageBox代码也显示在视图可见之前。如果我把它放在我的Overidden OnViewAttached中,它会强制OnViewLoaded被更快地执行,从而导致出现工作的东西。但是,如果我把其他代码放在那里,它仍然会在视图可见之前执行。 – user1018465
@EtherDragon,那么CM什么时候实际实例化VIEW?它是否在启动时全部实现它们? – JobaDiniz