我目前正在进入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在视图可见之前出现。
当然我错过了什么,我做错了什么?
答案 0 :(得分:2)
也许不是最优雅的解决方案,但我想你可以从代码隐藏中做到这一点,因为 - 严格来说 - 这是你在这里尝试做的非常看/ gui特定的事情。例如在OnInitialized或OnRender中。如果您为视图提供对EventAggregator的引用,您可以引发一个事件并创建视图模型 - 或者您想要的任何类,订阅此事件并执行此操作。或者在显示MessageBox的情况下,除了View之外,你真的不会有任何其他地方。