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

Messages postés
14046
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2019
- - Dernière réponse : Whismeril
Messages postés
14046
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2019
- 24 juin 2019 à 08:53
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 

3 réponses

Meilleure réponse
Messages postés
27059
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2019
318
1
Merci
Hello,

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


Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS SourceS

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jordane45
Messages postés
14046
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2019
324
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
Messages postés
1
Date d'inscription
lundi 24 juin 2019
Statut
Membre
Dernière intervention
24 juin 2019
0
Merci
Bonjour,

Ces tutoriels peuvent aider:
https://social.msdn.microsoft.com/Forums/en-US/2ca080a7-8c80-4b7b-b5c6-9b2b5fe75619/wpf-c-project-access-textboxtext-from-newly-added-class?forum=Vsexpressvcs https://writemyessaytoday.net/ https://stackoverflow.com/questions/13314066/editing-xaml-textbox-not-from-mainpage-class
Je n'ai pas trouvé les solutions sur les forums français. L'anglais étant ma langue seconde, j'ai donc dû traduire les discussions en premier pour bien comprendre les idées.
Whismeril
Messages postés
14046
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2019
324 -
Bonjour
Merci, même si depuis 4 ans je suis passé à autre chose
Commenter la réponse de randybonnette