J'écris une partie de mon code d'interface utilisateur en C #. Il a ListView avec ItemSource comme List<MyClass>. Lorsque je clique sur une cellule, je veux passer tout l'objet de MyClass à la commande liée.

Pendant que je le développais en XAML, je suis tombé sur CommandParameter = "{Binding.}". En faisant cela, j'ai pu envoyer l'objet entier.

 <Label.GestureRecognizers>
     <TapGestureRecognizer Command="{Binding BindingContext.MyId, Source={x:Reference MyList}}"
    CommandParameter="{Binding .}" />
    </Label.GestureRecognizers>

Je veux connaître l'équivalent c # de "{Binding .}".

1
Pranay Deep 23 mai 2018 à 16:05

3 réponses

Meilleure réponse

Après avoir passé presque des heures à appliquer toutes sortes de permutations et de combinaisons, voici le "truc" qui a fonctionné pour moi:

Label lbl = new Label();
lbl.SetBinding(Label.TextProperty, modelProperty.Name, BindingMode.TwoWay);
TapGestureRecognizer tgr= new TapGestureRecognizer
{
  Command = BindingContext.CellClickedCommand,
};
tgr.SetBinding(TapGestureRecognizer.CommandParameterProperty, ".");
lbl.GestureRecognizers.Add(tgr);

Je pense que Microsoft doit fournir de meilleurs documents pour les formulaires Xamarin, car tous les développeurs ne travaillent pas avec XAML tout le temps. De plus, la plupart des documents ne sont pas avec MVVM.

1
Pranay Deep 24 mai 2018 à 08:42

Voici un exemple de la manière de lier le CommandParameterProperty d'un TapGestureRecognizer à la propriété Text d'un Label en utilisant C #

public MainPage()
{
    var labelTappedGestureRecognizer = new TapGestureRecognizer
    {
        Command = new Command<string>(async labelText => await DisplayAlert("Label Tapped", labelText, "OK"))
    };

    var myLabel = new Label
    {
        Text = "This is my label",
        HorizontalOptions = LayoutOptions.Center,
        VerticalOptions = LayoutOptions.Center
    };

    myLabel.GestureRecognizers.Add(labelTappedGestureRecognizer);
    labelTappedGestureRecognizer.SetBinding(TapGestureRecognizer.CommandParameterProperty, new Binding(nameof(Label.Text), source: myLabel));

    Content = myLabel;
}
0
Brandon Minnick 23 mai 2018 à 19:44

"{Binding .}" équivaut simplement à new Binding("."). Mais CommandParameter="{Binding .}" équivaut à `tapGestureRecognizer.SetBinding (TapGestureRecognizer.CommandParameterProperty, new Binding (". ")).

0
Alex.Wei 24 mai 2018 à 11:12