我目前正在使用 WPF 和 Caliburn.Micro ,目前没有 MEF 或 Autofac 之类的东西。
现在我试图在 View 变得可见后立即在 View 模型中执行一些代码。
在相关教程中,此代码在显示 View 之前显示一个消息框:
protected override void OnActivate()
{
MessageBox.Show("Page Two Activated"); //Don't do this in a real VM.
base.OnActivate();
}
艾森伯格先生接着写道:
Remember, if you have any activation logic that is dependent on the view being already loaded, you should override Screen.OnViewLoaded instead of/in combination with OnActivate.
这就是我所拥有的:
protected override void OnViewLoaded(object view)
{
base.OnViewLoaded(view);
MessageBox.Show("OnPageTwoViewLoaded");
}
我还通过 Grid EventTrigger 和 cal:ActionMessage 进行了尝试。
但在所有三种情况下,MessageBox 都会在 View 可见之前出现。
我肯定错过了什么,我做错了什么?
最佳答案
也许不是最优雅的解决方案,但我想你可以从代码隐藏中做到这一点,因为 - 严格来说 - 这是你在这里尝试做的一个非常特定于 View /gui的事情。例如在 OnInitialized 或 OnRender 中。如果你给你的 View 一个对 EventAggregator 的引用,你可以引发一个事件并创建 View 模型 - 或者你想要的任何类,订阅这个事件并做它的事情。或者在显示 MessageBox 的情况下,除了在 View 中之外,您真的不会有任何其他地方。
关于wpf - Caliburn.Micro - 当 View 可见时做一些事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7932273/