我目前正在进入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都是在视图可见之前出现的。
我肯定错过了什么,我做错了什么?
可能不是最优雅的解决方案,但我猜您可以从代码后面完成此操作,因为严格地说,这是您在这里尝试做的非常特定于视图/gui的事情。例如在OnInitialized或OnRender中。如果你给你的视图一个对EventAggregator的引用,你可以引发一个事件并使视图模型-或任何你想要的类,订阅这个事件并做它的事情。或者在显示MessageBox的情况下,除了在视图中,你不会在其他任何地方显示它