当视图可见时,校准微运行代码?

时间:2013-04-26 15:43:57

标签: wpf caliburn.micro

我需要在显示视图后立即运行一些代码(比如显示消息框)。我试图覆盖OnInitializeOnViewLoadedOnViewAttached,但它始终相同。视图尚未完全显示。

我在显示视图时使用了一些动画,但同时需要将一些数据加载到网格中。如果我将数据加载到OnInitializeOnViewLoadedOnViewAttached,则动画不会平滑,因为它在加载数据的同时发生。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

尝试这样的东西 - 在绑定网格之前使用couroutine等待动画完成:

private IEnumerator<IResult> ViewModelStartup()
{
    yield return new WaitForAnimation("AnimationName");
    BindData();
}

(注意 - 你可以加载数据异步,但不要分配它)

然后当您的表单加载时:

private void OnViewAttached()
{
    Coroutine.BeginExecute(ViewModelStartup(), new ActionExecutionContext() { View = this.GetView() });
}

(上面的代码可能不是100%......我认为View必须在FrameworkElementActionExecutionContext,因此根据需要进行转换或创建包装类)

WaitForAnimation协程的实现将在视图中搜索命名动画,并在触发回调之前等待它完成。如果找不到动画,你应该只是触发回调。 couprine可用于多个视图。

(协同程序必须实现IResult查看CM codeplex网站上的文档以获取信息)

http://caliburnmicro.codeplex.com/wikipage?title=IResult%20and%20Coroutines&referringTitle=Documentation