wpf - Caliburn.Micro - 当 View 可见时做一些事情

标签 wpf caliburn.micro

我目前正在使用 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/

相关文章:

c# - 将重复应用于代码隐藏的约会(DevExpress Scheduler Control)

wpf - 在 WPF 中使用另一个控件作为不透明蒙版?

c# - 按键按钮 Action

WPF//MahApps.Metro//Caliburn.Micro//Flyout//HeaderedContentControl

c# - MVVM 模式中的去抖动事件/命令

c# - 如何使用 Handle 中的协程 - Caliburn Micro 中 IResult 的实现

wpf - 数据网格上的弹出窗口中的按钮未引发单击事件

WPF - 使用样式触发器设置自定义工具提示

c# - 列表框对齐 WPF 内的复选框

wpf - Caliburn.Micro 在 WPF 中拖放文件