【发布时间】:2017-01-26 12:09:09
【问题描述】:
我试图弄清楚如何使用 MVVM 轻框架从我的 MVVM Xamarin Forms 应用程序中的视图模型触发动画,而不会使我的应用程序崩溃。
我了解到动画不属于视图模型,因此我将此逻辑移至视图。
当按下按钮(绑定到我的视图模型中的命令)时,我会从我的视图模型向我的视图发送一条消息以触发动画。
视图模型代码:
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 视图后面的代码中,我有一个执行动画的方法。
查看代码:
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)。
正如此错误报告的 cmets 中所建议的,我尝试解决此问题的方法是尝试隐藏/禁用按钮,但尚未找到成功的方法。
我也尝试过同步调用动画。
如果您对如何解决这种情况有任何见解,我们将不胜感激。
我的(仍然很小的)代码库可以在这里找到:https://github.com/sjorsmiltenburg/Cyclades.Shuffler/tree/develop
【问题讨论】:
标签: animation xamarin.forms task mvvm-light