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

C# 在MVVM中等待动画完成的最佳方式是什么?,c#,wpf,mvvm,mahapps.metro,C#,Wpf,Mvvm,Mahapps.metro,我有一个带有周期动画(用C代码编写)的MetroTile和一个DataGrid。当网格出现验证错误时,viewmodel中tile命令的CanExecute()返回false,并且tile被禁用 这是在计时器的勾选方法中执行的动画代码: DoubleAnimation db = new DoubleAnimation(startStopTile.ActualHeight, 0, TimeSpan.FromSeconds(0.5)); db.FillBehavior = FillBehavior.

我有一个带有周期动画(用C代码编写)的MetroTile和一个DataGrid。当网格出现验证错误时,viewmodel中tile命令的CanExecute()返回
false
,并且tile被禁用

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

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
,但是我不确定这是否是最好的方法。

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

db.Completed += OnAnimationComplete;

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

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