tapped tapgesturerecognizer gesturerecognizer event xamarin xamarin.forms

xamarin - tapgesturerecognizer - ¿Puedo usar el código C#para agregar una llamada a un comando en lugar de un<Grid.GestureRecognizers>?



xamarin forms tapgesturerecognizer xaml (1)

Tengo este código:

<ViewCell x:Name="co"> <Grid VerticalOptions="CenterAndExpand" Padding="20, 0"> <Grid.GestureRecognizers> <TapGestureRecognizer Command="{Binding OpenPickerCommand}" CommandParameter="{x:Reference coPicker}" NumberOfTapsRequired="1" /> </Grid.GestureRecognizers> <Picker x:Name="coPicker" IsVisible="false" HorizontalOptions="End" SelectedIndexChanged="coPickerSelectedIndexChanged" ItemsSource="{Binding Order}"></Picker> <Label x:Name="coLabel" HorizontalOptions="End"/> </Grid> </ViewCell>

¿Hay alguna manera de que pueda conectar un comando en C # para tocar la celda en lugar de tener que usar XAML <Grid.GestureRecognizers> ?


Agregar un GestureRecognizer a una ViewCell es un gran no-no. Una ViewCell existe dentro de un ListView o TableView que tienen más que suficientes opciones personalizadas. Agregar un GestureRecognizer puede confundir el sistema operativo con respecto a qué toque debe manejar.

Sus opciones para GestureRecognizer son básicamente las 3 siguientes, pero desaconsejo las mismas en un escenario en el que tenga ListView / TableView .

Vea algunas de las alternativas basadas en ListView / ViewCell que menciono a continuación en su situación.

1. GestureRecognizer - Agréguelo en el código

var tapGestureRecognizer = new TapGestureRecognizer(); tapGestureRecognizer.Tapped += (s, e) => { // handle the tap }; myGrid.GestureRecognizers.Add(tapGestureRecognizer);

2. GestureRecognizer - Use un comando

Cuando usa MVVM también puede usar un enlace de comando en C #:

var tapGestureRecognizer = new TapGestureRecognizer(); tapGestureRecognizer.SetBinding (TapGestureRecognizer.CommandProperty, "TapCommand"); myGrid.GestureRecognizers.Add(tapGestureRecognizer);

Que luego se puede enlazar en XAML:

<Grid> <Grid.GestureRecognizers> <TapGestureRecognizer Command="{Binding TapCommand}" /> </Grid.GestureRecognizers> </Grid>

3. GestureRecognizer: agrégalo a XAML como lo has hecho

<Grid> <Grid.GestureRecognizers> <TapGestureRecognizer Command="{Binding OpenPickerCommand}" CommandParameter="{x:Reference coPicker}" NumberOfTapsRequired="1" /> </Grid.GestureRecognizers> </Grid>

4. ViewCell: evento aprovechado

Para ViewCell tienes un evento Tapped :

<ViewCell Height="100" Tapped="OnTapped"> <ViewCell.View> <StackLayout BackgroundColor="White" > </StackLayout> </ViewCell.View> </ViewCell>

Que puedes implementar en código subyacente:

void OnTapped (object sender, System.EventArgs e) { //your code}

5. ViewCell - Comando Tapped

Al usar MVVM, no desea poner mucha lógica comercial en el código subyacente de sus páginas. En ese caso, puede usar un Behavior para convertir el evento en un comando. Una muestra de eso se puede encontrar aquí:

https://github.com/xamarin/xamarin-forms-samples/tree/master/Behaviors/EventToCommandBehavior/EventToCommandBehavior

6. ListView - ItemSelected

ListView también tiene un evento ItemSelected . Esto se puede manejar de la misma manera que el evento ViewCell Tapped con un evento en código subyacente o un Behavior para delegarlo en un Command .

7. ListView - propiedad SelectedItem

Puede vincular SelectedItem a una propiedad en su modelo de vista. En el setter puede realizar su código personalizado.

<ListView ItemsSource="{Binding YourItems}" SelectedItem="{Binding YourSelectedItem, Mode=TwoWay}" > </ListView>

Y en código:

string _yourSelectedItem; public string YourSelectedItem { get { return _yourSelectedItem; } set { _yourSelectedItem = value; // Perform your custom functionality } }