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

Résolu
Whismeril Messages postés 18939 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 février 2024 - 14 févr. 2015 à 11:33
Whismeril Messages postés 18939 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 février 2024 - 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 38040 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 février 2024 344
14 févr. 2015 à 17:36
1
Whismeril Messages postés 18939 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 février 2024 649
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 18939 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 février 2024 649
24 juin 2019 à 08:53
Bonjour
Merci, même si depuis 4 ans je suis passé à autre chose
0
Rejoignez-nous