[WPF] Comment appeler une méthode depuis du code XAML ?
Beaucoup de gens se demande s'il est possible d'appeler une méthode depuis son code XAML. Par exemple, comment appeler une méthode d'un Web Service directement depuis son XAML ?
Il est possible d'y parvenir en utilisant un ObjectDataProvider. Prenons l'exemple de la classe suivante:
public class BusinessClass
{
public string SayHelloToSomeOne(string someone)
{
return !string.IsNullOrEmpty(someone) ? string.Format("Hello {0}", someone) : "Hello everybody";
}
}
Comment parvenir à appeler cette méthode depuis un ObjectDataProvider ? Tout simplement en spécifiant les propriétés ObjectType et MethodName de notre objet:
<ObjectDataProvider x:Key="odp" ObjectType="local:BusinessClass" MethodName="SayHelloToSomeOne">
<ObjectDataProvider.MethodParameters>
<s:String>Thomas</s:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
A noter qu'il est possible d'utiliser la propriété ObjectInstance pour se lier à une instance déjà existante.
Ensuite, dans votre code XAML, il ne vous reste plus qu'à vous lier à votre objet, via un petit binding:
<TextBlock x:Name="tb" Grid.Row="0" Text="{Binding Source={StaticResource odp}}" />
De plus, si vous souhaitez modifier les paramètres de la méthode appellée, il vous convient d'accéder, par code, à votre ObjectDataProvider:
private void btn_Click(object sender, RoutedEventArgs e)
{
var odp2 = Resources["odp"] as ObjectDataProvider;
if (odp2 != null)
{
odp2.MethodParameters[0] = string.Empty;
odp2.Refresh();
}
}
Et le tour est joué 
A+
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :