2017-01-26 11 views
0

Я пытаюсь выяснить, как запускать анимацию из моей модели просмотра в приложении MVVM Xamarin Forms, используя фреймворк MVVM без сбоев моего приложения.триггер анимации на кнопке нажмите

Я узнал, что анимация не принадлежит к модели просмотра, и поэтому я переместил эту логику в представление.

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

ViewModel Код:

public class GamePageViewModel : ViewModelBase 
{ 
    private readonly IDialogService _dialogService; 

    public ICommand NextRoundCommand 
    { 
     get 
     { 
      return new RelayCommand(() => 
      { 
       NextButtonEnabled = false; 
       _game.MoveToNextRound(); 
       UpdateOnScreenText(); 
       NextButtonEnabled = true; 
      },()=> false); 
     } 
    } 

    private bool _nextButtonEnabled = false; 
    public bool NextButtonEnabled 
    { 
     get { return _nextButtonEnabled; } 
     set 
     { 
      _nextButtonEnabled = value; 
      RaisePropertyChanged(()=>NextButtonEnabled); 
     } 
    } 

    private void UpdateOnScreenText() 
    { 
     Messenger.Default.Send(new StartEnlargeAnimationMessage()); 
     Item1Text = _game.CurrentRound.OpenCards[0].Name; 
    } 
} 

В коде позади моего зрения XAML у меня есть метод, который выполняет анимацию.

View Code:

public partial class GamePage : ContentPage 
{ 
    public GamePage(GamePageViewModel gamePageViewModel) 
    { 
     BindingContext = gamePageViewModel; 
     InitializeComponent(); 

     Messenger.Default.Register<StartEnlargeAnimationMessage>(this, PlayEnlargeAnimation); 
    } 

    //private bool playingAnimation = false; 
    private async void PlayEnlargeAnimation(StartEnlargeAnimationMessage message) 
    { 
     await RoundLabel.ScaleTo(2, 500, Easing.CubicIn); 
     await RoundLabel.ScaleTo(1, 500, Easing.CubicIn); 
    } 

Это работает несколько.

Проблема заключается в том, что когда пользователь дважды нажимает кнопку (быстро, внутри активной анимации), я получаю сообщение об ошибке «Была предпринята попытка перевести задачу в конечное состояние, когда она уже была завершена».

Эта проблема, кажется, известная проблема в течение многих месяцев, но еще не исправлена ​​(https://bugzilla.xamarin.com/show_bug.cgi?id=41016).

Как было предложено в комментариях к этому сообщению, способы, с которыми я пытался работать, это попытаться скрыть/отключить кнопку, но пока не нашли успешного способа сделать это.

Я также попытался вызвать анимацию синхронно.

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

Мой (еще маленький) кодовая можно найти здесь: https://github.com/sjorsmiltenburg/Cyclades.Shuffler/tree/develop

ответ

0

хм .. видимо, я смотрел на старый код в моем эмуляторе. Мне пришлось удалить программу на эмулятор, чтобы она обновилась. После этого отключить/включить кнопки во время анимации зафиксировала мою проблему. Хотя я все еще разочарован тем, что это может привести к сбою приложения.