Я пытаюсь выяснить, как запускать анимацию из моей модели просмотра в приложении 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