Почему распознаватель TapGesture для Grid медленно реагирует в случае UWP, но отлично работает в Android и iOS? - PullRequest
1 голос
/ 17 июня 2020

У меня есть кнопка и сетка. Кнопка привязана к ExecuteButtonCommand, а TapGestureRecognizer для Grid привязана к ExecuteGridCommand. Теперь, если я нажимаю кнопку быстро и быстро, соответствующая метка показывает правильное количество кликов для всех платформ, то есть код команды выполняется столько раз, сколько раз произошло нажатие.

Но в случае сетки, хотя для android и iOS работает отлично. Но для UWP не все щелчки выполняют команду. Пример: Если я нажимаю сетку быстро и быстро, скажем, 6 раз, то соответствующая метка показывает только 3 или 4 отсчета, что означает, что команда для выполнения жестов выполняется меньшее количество раз, чем на самом деле.

Это что у меня есть в моей ViewModel

<StackLayout HorizontalOptions="Center" VerticalOptions="Center">
        <!-- Place new controls here -->
        <Label Text="{Binding ButtonExecutionCount}" HorizontalOptions="Center"/>
        <Button x:Name="ClickButton" Text="ExecuteClick"  HorizontalOptions="Center"
                    Command="{Binding ExecuteButtonCommand}"
                />
        <Label Text="{Binding GridExecutionCount}" HorizontalOptions="Center"/>
        <Grid BackgroundColor="Aquamarine" VerticalOptions="Center" HorizontalOptions="Center">
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Label Text="Click this grid" Grid.Column="0" Grid.Row="0" HorizontalOptions="Center"/>
            <Grid.GestureRecognizers>
                <TapGestureRecognizer Command="{Binding ExecuteGridCommand}"></TapGestureRecognizer>
            </Grid.GestureRecognizers>
        </Grid>
    </StackLayout>

И вот код привязки ViewModel, который записывает и отображает количество кликов:

public class MainPageViewModel : INotifyPropertyChanged
    {
        public MainPageViewModel()
        {
            ExecuteGridCommand = new Command(ExecuteGridMethod);
            ExecuteButtonCommand = new Command(ExecuteButtonMethod);
        }

        private int _gridExecutionCount;
        public int GridExecutionCount
        {
            get => _gridExecutionCount;
            set
            {
                _gridExecutionCount = value;
                OnPropertyChanged();
            }
        }

        private int _buttonExecutionCount;
        public int ButtonExecutionCount
        {
            get => _buttonExecutionCount;
            set
            {
                _buttonExecutionCount = value;
                OnPropertyChanged();
            }
        }

        public Command ExecuteGridCommand { get; set; }

        public Command ExecuteButtonCommand { get; set; }


        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged([CallerMemberName] string name = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
        }

        public void ExecuteGridMethod()
        {
            GridExecutionCount++;
        }

        public void ExecuteButtonMethod()
        {
            ButtonExecutionCount++;
        }
    }

Здесь я нажал и 5 раз, и кнопку count - это нормально, но для сетки в UWP это меньше, чем фактических кликов.

введите описание изображения здесь

1 Ответ

1 голос
/ 18 июня 2020

Причина: Странное поведение в вашем проекте было вызвано версией Xamarin.Forms. Это существующая проблема в версии 4.5.x.

Решение: Проблема была исправлена ​​в последней версии (4.7.x). Протестировал на нем ваш образец и работает нормально. Таким образом, вам просто нужно обновить версию XF как в общих проектах, так и в проектах платформы до последней версии.

...