C# 在MVVM中等待动画完成的最佳方式是什么?
我有一个带有周期动画(用C代码编写)的MetroTile和一个DataGrid。当网格出现验证错误时,viewmodel中tile命令的CanExecute()返回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.
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();
}