Можете ли вы иметь пункт охраны, который ждет завершения раскадровки - PullRequest
0 голосов
/ 21 февраля 2012

Я хочу определить раскадровку, которая запускается в течение пяти секунд при нажатии кнопки:

  • Могу ли я добавить защитную фразу на раскадровку, чтобы кнопка не нажималась несколько раз?раз?

  • Если нет , каков будет способ справиться с этим без явной ссылки на анимацию в ViewModel.

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

Если вам действительно нужно, чтобы кнопка была связана с анимацией, то я, вероятно, создал бы TriggerAction (System.Windows.Interactivity.TriggerAction) и прикрепил бы ее к кнопке.Затем действие отключило бы кнопку, запустило анимацию и прослушало событие анимации «Завершено» перед повторным включением кнопки.

IMHO MVVM не подходит в этом сценарии, так как все взаимодействия связаны с просмотром, и нетдействительно хороший способ сообщить вашей ViewModel, что анимация анимации.Более того, фактическое время анимации не является детерминированным, поэтому может иметь и другие последствия, если вы предполагаете фиксированное время.

Возможно, вы захотите взглянуть на настройку HandOffBehavior вашей анимации.В зависимости от того, какую анимацию вы на самом деле делаете, может не быть реального штрафа, если пользователь будет нажимать кнопку несколько раз.Если есть, воспользуйтесь предложенным выше предложением и отключите кнопку.

1 голос
/ 21 февраля 2012

Вы можете сделать следующее:

  • Когда кнопка нажата, запустите Storyboard и установите для Button.IsEnabled значение false. Это предотвратит последующие клики.
  • Обработка события Storyboard.Completed для повторного включения вашей кнопки.

С точки зрения MVVM включенное состояние вашей кнопки должно быть свойством вашей модели представления. Вы должны иметь возможность выставить это как логическое свойство и связать его с Button.IsEnabled. Когда вы запускаете раскадровку (предположительно из кода), вы можете установить состояние включения кнопки через ссылку на модель представления.

Да, ... в коде позади! Это все еще в достаточной степени отделяет ваш взгляд от вашей модели представления и позволяет проводить модульное тестирование.

...