在MVVM中等待动画完成的最佳方法是什么?

时间:2016-05-22 13:57:14

标签: c# wpf mvvm mahapps.metro

我有一个带有周期性动画的MetroTile(用C#代码编写)和一个DataGrid。当网格出现验证错误时,视图模型中的tile命令的CanExecute()将返回false,并且磁贴已禁用。

这是在计时器的tick方法中执行的动画代码:

DoubleAnimation db = new DoubleAnimation(startStopTile.ActualHeight, 0, TimeSpan.FromSeconds(0.5));
db.FillBehavior = FillBehavior.Stop;
startStopTile.BeginAnimation(HeightProperty, db);

问题是在动画期间可以禁用磁贴并在其中间冻结。在禁用磁贴之前等待动画完成的最佳方法是什么?

我以为我可以在动画结束时更新一个viewmodel属性(即bool AnimationCompleted)并在CanExecute()中等待while循环让它转true,但我不是确定它是否是最好的方法。

1 个答案:

答案 0 :(得分:0)

为什么不在动画完成后使用动画完成事件通知ViewModel?循环时无需等待(这很糟糕,因为它会阻止UI)。

db.Completed += OnAnimationComplete;

private void OnAnimationComplete(object sender, EventArgs e)
{
    db.Completed -= OnAnimationComplete;

    // Notify ViewModel that it finished
    //
    // example: viewModel.NotifyAnimationComplete();
}