如何将手势识别器添加到viewModel C#

时间:2017-09-05 10:44:51

标签: xamarin xamarin.forms

我有这样的标签:

<Label Grid.Row="1" Grid.Column="0" x:Name="faveLabel" Style="{StaticResource smallIcon}" FontFamily="FontAwesome" VerticalOptions="FillAndExpand" VerticalTextAlignment="Center" />

在C#背后我有:

faveLabel.GestureRecognizers.Add(
            new TapGestureRecognizer()
            {
                Command = new Command(() =>
                {
                    App.phrase.Favorite = !App.phrase.Favorite;
                    faveLabel.TextColor = App.phrase.Favorite == true ? Color.Red : Color.Gray;
                    App.DB.UpdateFavorite(App.phrase.Favorite, App.phrase.PhraseId);
                })
            });

当我将ViewModel绑定到此框架时,如何将其移动到此viewModel代码中?

public class PhrasesFrameViewModel : ObservableProperty
{
    public PhrasesFrameViewModel()
    {

        var aButtonClickedCommand = new Command(() =>
        {
            App.DB.IncrementScore(App.cfs, App.phrase, (int)App.aBtn);
            App.correctButtonPressed = (int)App.aBtn;
            ResetTimer2();
        });

请注意,我真的想避免将手势识别器添加到XAML中,因为XAML已经相当大了。

1 个答案:

答案 0 :(得分:3)

您可以绑定最新版本的Xamarin.Forms中的命令,因此您可以执行以下操作:

你的viewmodel:

public class PhrasesFrameViewModel : ObservableProperty
{
    public PhrasesFrameViewModel()
    {

        var aButtonClickedCommand = new Command(() =>
        {
            App.DB.IncrementScore(App.cfs, App.phrase, (int)App.aBtn);
            App.correctButtonPressed = (int)App.aBtn;
            ResetTimer2();
        });

你的xaml:

<Label.GestureRecognizers>
    <TapGestureRecognizer Command="{Binding aButtonClickedCommand}"/>
</Label.GestureRecognizers>

这应该将viewmodel中的命令绑定到您的标签。