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

What is the best way to wait for an animation to finish in MVVM?

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

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

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

问题是 tile 可以在动画过程中被禁用并在中间冻结。在禁用图块之前等待动画完成的最佳方法是什么?

我想我可以在动画结束时更新视图模型 属性(即 bool AnimationCompleted),然后在 CanExecute() 中等待一段时间循环使其变为 true , 但我不确定这是否是最好的方法。

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

db.Completed += OnAnimationComplete;

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

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