我需要在视图显示后立即运行一些代码(比如说显示消息框)。我试图覆盖OnInitialize
,OnViewLoaded
或者OnViewAttached
但它总是一样的。视图尚未完全显示。
我在显示视图时使用了一些动画,但同时需要将一些数据加载到网格中。如果我将数据加载到OnInitialize
,OnViewLoaded
或者OnViewAttached
动画不流畅,因为它在加载数据的同时发生。
有什么想法吗?
我需要在视图显示后立即运行一些代码(比如说显示消息框)。我试图覆盖OnInitialize
,OnViewLoaded
或者OnViewAttached
但它总是一样的。视图尚未完全显示。
我在显示视图时使用了一些动画,但同时需要将一些数据加载到网格中。如果我将数据加载到OnInitialize
,OnViewLoaded
或者OnViewAttached
动画不流畅,因为它在加载数据的同时发生。
有什么想法吗?
尝试这样的事情 - 在绑定网格之前使用 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 站点上的文档以获取信息)