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