在 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();
}
我有一个带有周期性动画(用 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();
}