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

Whismeril 11406 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 14 févr. 2015 à 11:33 - Dernière réponse : Whismeril 11406 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention
- 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 

2 réponses

Répondre au sujet
jordane45 20567 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 avril 2018 Dernière intervention - 14 févr. 2015 à 17:36
+1
Utile
Hello,

Ceci peut être :
http://www.xaml.fr/xaml-code-evenement.html


Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jordane45
Whismeril 11406 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 15 févr. 2015 à 11:38
0
Utile
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.