WPF exécuter une méthode de l'objet utilisé pour le binding

Résolu
Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
- 14 févr. 2015 à 11:33
Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
- 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

3 réponses

jordane45
Messages postés
35502
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
356
14 févr. 2015 à 17:36
1
Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
596
15 févr. 2015 à 11:38
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!
0
randybonnette
Messages postés
1
Date d'inscription
lundi 24 juin 2019
Statut
Membre
Dernière intervention
24 juin 2019

24 juin 2019 à 07:49
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.
0
Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
596
24 juin 2019 à 08:53
Bonjour
Merci, même si depuis 4 ans je suis passé à autre chose
0