1

我需要在视图显示后立即运行一些代码(比如说显示消息框)。我试图覆盖OnInitializeOnViewLoaded或者OnViewAttached但它总是一样的。视图尚未完全显示。

我在显示视图时使用了一些动画,但同时需要将一些数据加载到网格中。如果我将数据加载到OnInitializeOnViewLoaded或者OnViewAttached动画不流畅,因为它在加载数据的同时发生。

有什么想法吗?

4

1 回答 1

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必须根据需要FrameworkElement进行转换ActionExecutionContext或创建包装类)

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

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

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

于 2013-04-27T11:49:40.667 回答