J'ai un bouton wpf comme celui-ci:
<Button Click="button1_Click" Height="23" Margin="0,0,5,0" Name="button1" Width="75">Initiate</Button>
Et je veux transmettre {Binding Code}
passé en tant que paramètre au gestionnaire button1_click.
Comment puis-je m'y prendre?
Avertissement: vraiment nouveau sur WPF
Solution simple:
<Button Tag="{Binding Code}" ...>
Dans votre gestionnaire, transformez l'objet sender
en Button
et accédez à la propriété Tag
:
var myValue = ((Button)sender).Tag;
Une solution plus élégante consisterait à utiliser le modèle de commande de WPF : créez une commande pour la fonctionnalité que le bouton doit exécuter, liez la commande à la propriété Command
du bouton et liez la variable CommandParameter
à votre valeur.
Je ne suis pas trop fan de 'Tag' alors peut-être
<Button Click="button1_Click" myParam="parameter1" Height="23" Margin="0,0,5,0" Name="button1" Width="75">Initiate</Button>
Puis accéder via les attributs.
void button1_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
var theValue = button.Attributes["myParam"].ToString()
}
Eh bien, il y a deux façons de faire cela:
Cast le DataContext
void button1_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
var code = ((Coupon)button.DataContext).Code;
}
Ou utilisez la propriété Tag qui est une propriété d'état générique
<Button Click="button1_Click" Height="23" Margin="0,0,5,0" Name="button1" Tag="{Binding Code}" />
puis
void button1_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
var code = button.Tag;
}
Utiliser Xaml et DataContext
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:DataAndCloudServices"
x:Class="DataAndCloudServices.MainPage" >
<StackLayout>
<!-- Command Implemented In Code Behing -->
<Button Text="Consuming Web Services Samples"
Command="{Binding NavigateCommand}"
CommandParameter="{x:Type local:YourPageTypeHere}" >
</Button>
</StackLayout>
</ContentPage>
Et MainPage Code Behing, cet exemple de code consiste à naviguer vers une autre page en utilisant le type de page en argument, vous devez créer "YourPageTypeHere" et la page de référence ici.
Puis implémentez le code Behind.
using System;
using System.Windows.Input;
using Xamarin.Forms;
namespace DataAndCloudServices
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
NavigateCommand = new Command<Type>(
async (Type pageType) =>
{
Page page = (Page)Activator.CreateInstance(pageType);
await Navigation.PushAsync(page);
});
this.BindingContext = this;
}
public ICommand NavigateCommand { private set; get; }
}
}
Aussi dans votre classe App besoin d'une instance de NavigationPage dans MainPage pour naviguer (Pour cet exemple)
public App ()
{
InitializeComponent();
MainPage = new NavigationPage(new MainPage());
}
C'est pour les formes xamarin, mais c'est pareil pour les projets WPF.
La commande peut être modifiée avec pour WPF et Xamarin: " https://stackoverflow.com/a/47887715/8210755 "