我试图弄清楚如何使用MVVM光框架在我的MVVM Xamarin Forms应用程序中从我的viewmodel触发动画而不会崩溃我的应用程序。
我了解到动画不属于viewmodel,因此我将此逻辑移至视图中。
当按下一个按钮(绑定到我的视图模型中的命令)时,我将视频模型中的一条消息发送到我的视图以触发动画。
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视图后面的代码中,我有一个执行动画的方法。
查看代码:
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)。
正如此bug报告的评论中所提到的,我试图解决这个问题的方法是尝试隐藏/禁用按钮,但尚未找到成功的方法。
我也尝试同步调用动画。
如果您对如何解决此方案有任何见解,我们将不胜感激。
我的(仍然很小)代码库可以在这里找到:https://github.com/sjorsmiltenburg/Cyclades.Shuffler/tree/develop
答案 0 :(得分:0)