WPF exécuter une méthode de l'objet utilisé pour le binding [Résolu]

Messages postés
12268
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 novembre 2018
- 14 févr. 2015 à 11:33 - Dernière réponse :
Messages postés
12268
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 novembre 2018
- 15 févr. 2015 à 11:38
Bonjour,

je me suis lancé dans le WPF depuis quelques semaines, et jusqu'à lors j'ai trouvé toutes les réponses à mes questions sur divers forums, sauf celle-ci.

Je dispose d'un objet, dont une méthode string est bindée sur Text d'un textBlock lui même dans un Button.

Au click du bouton, via le code behind, le texte de mon objet change et par la même occasion celui du textBlock.

Voilà le code de l'objet:

using System.ComponentModel;

namespace Test_WPF
{
    public class MyClass:INotifyPropertyChanged
    {
        private string textButton = "First text";

        public string TextButton
        {
            get { return textButton; }
            set 
            {
                if (textButton != value)
                {
                    textButton = value;
                    if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("TextButton"));
                }
            }
        }

        public void ChangeText()
        {
            TextButton = "New text";
        }
        

        public event PropertyChangedEventHandler PropertyChanged;
    }
}

le xaml:

<Window x:Class="Test_WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">

    <Grid>
        <Button x:Name="MyButton" HorizontalAlignment="Left" Margin="308,120,0,0" VerticalAlignment="Top" Width="75" Click="MyButton_Click">
            <TextBlock Text="{Binding TextButton}"/>
        </Button>

    </Grid>
</Window>

et le code behind:

using System.Windows;

namespace Test_WPF
{
    /// <summary>
    /// Logique d'interaction pour MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        private MyClass myClass;


        public MainWindow()
        {
            InitializeComponent();
            myClass = new MyClass();
            MyButton.DataContext = myClass;
        }

        private void MyButton_Click(object sender, RoutedEventArgs e)
        {
            myClass.ChangeText();
        }
    }
}

Je voudrais savoir s'il est possible d'exécuter

myClass.ChangeText();

directement dans le xaml?

quelque chose comme ça:

 <Button x:Name="MyButton" HorizontalAlignment="Left" Margin="308,120,0,0" VerticalAlignment="Top" Width="75" Click=myObject.ChangeText>
Merci d'avance

Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
23299
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 novembre 2018
- 14 févr. 2015 à 17:36
1
Merci

Merci jordane45 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de jordane45
Messages postés
12268
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 novembre 2018
- 15 févr. 2015 à 11:38
0
Merci
Salut, et merci cela répond exactement à ma question:

Voilà le code xaml qui fonctionne
<Window x:Class="Test_WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:def="Definition"
        Title="MainWindow" Height="350" Width="525">

    <Grid>
        <Button x:Name="MyButton" HorizontalAlignment="Left" Margin="308,120,0,0" VerticalAlignment="Top" Width="75" Click="ButtonOnClick">
            <TextBlock Text="{Binding TextButton}"/>
        </Button>
        <x:Code>
            <![CDATA[
            void ButtonOnClick(object sender, RoutedEventArgs args)
            {
                Button btn = sender as Button;
                ((MyClass)btn.DataContext).ChangeText();
            }
            ]]>

        </x:Code>
    </Grid>
</Window>



Bon ça n'est pas économe en ligne de code, alors je ne sais pas si je vais utiliser cette méthode ou continuer avec le code behind, mais au moins j'ai appris un truc!
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.