2016-05-22 5 views
1

У меня есть MetroTile с периодической анимацией (написанной на языке C#) и DataGrid. Когда сетка имеет ошибки проверки, команда CanExecute() команды tile в режиме просмотра возвращает false, а плитка отключена.Каков наилучший способ подождать окончания анимации в MVVM?

Это код анимации выполняется в методе тиков таймера:

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

Проблема заключается в том, что плитка может быть отключена во время анимации и замерзает в середине. Каков наилучший способ дождаться завершения анимации до того, как плитка отключится?

Я думал, что я мог бы обновить ViewModel свойство (т.е. bool AnimationCompleted), когда анимация заканчивается и ждать в цикле, а в CanExecute() для того, чтобы превратить true, но я не уверен, что это лучший подход ,

ответ

0

Почему вы не просто уведомляете ViewModel после завершения анимации, используя событие «Анимация»? Нет необходимости ждать через цикл while (это плохо, потому что он блокирует пользовательский интерфейс).

db.Completed += OnAnimationComplete; 

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

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