IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Binding WPF pattern MVVM [MVVM]


Sujet :

Windows Presentation Foundation

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Binding WPF pattern MVVM
    Bonjour,

    Je développe une application type lecteur windows média dans le cadre de mes études, et je suis confronté à un problème de binding de mes informations. Je travaille sous le pattern MVVM.

    Voici le code XAML de la fenêtre :

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <Window x:Class="WMP2.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WMP2.ViewModel"
            Title="MainWindow"
            Loaded="Window_Loaded" MinWidth="525" MinHeight="350"
            WindowStartupLocation="CenterOwner"
            Background="Black" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Height="350" Width="525">
        <Window.Resources>
                <Grid>
    ...
    ...
                            <TextBox Text="{Binding playerSourceAcc}" Height="23" HorizontalAlignment="Left" Margin="16,216,0,0" Name="textBox1" VerticalAlignment="Top" Width="120">
                                <TextBox.DataContext>
                                    <local:PlayerViewModel/>
                                </TextBox.DataContext>
                            </TextBox>
    ...
    ...
        </Grid>
    </Window>

    Comme vous l'aurez compris, j'ai retiré une partie du code, car il est vraiment long, pour ne laisser que l'essentiel.
    J'ai donc du binding sur une textBox où je voudrais afficher du texte.

    La classe MVVM qui correspond est la suivante :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    namespace WMP2.ViewModel
    {
        class PlayerViewModel : INotifyPropertyChanged
        {
            public String playerSource { get; set; }
            public String playerSourceAcc
            {
                get
                {
                    return this.playerSource;
                }
                set
                {
                    if (this.playerSource != value)
                    {
                        this.playerSource = value;
                        if (this.PropertyChanged != null)
                            this.PropertyChanged(this, new PropertyChangedEventArgs("playerSourceAcc"));
                        Console.WriteLine("Nouvelle valeur : -----> " + this.playerSource);
                    }
                }
            }
     
            public PlayerViewModel()
            {
                this.playerSource = "C:\\Users\\Quentin\\Videos\\ET - Katy Perry (Cover by Tiffany Alvord).mp4";
                this.playCMD = new btnPlayCommand(new Action(() =>
                    {
                        this.playerSourceAcc = "toto";
                    }));
            }
     
            #region INotifyPropertyChanged Members
            public event PropertyChangedEventHandler PropertyChanged;
            #endregion
        }
    }

    La source du binding est donc l'accesseur playerSourceAcc. J'ai un bouton dans ma vue, qui utilise une commande personnalisée. Lorsque je clique dessus, je change la valeur de playerSource à "toto" via le playerSourceAcc. Seul problème, rien ne change dans ma vue (ma textbox affiche toujours le texte original).

    Voyez vous un problème là dedans ?

    Merci d'avance à tous ceux qui pourront m'aider (et aux autres !) !

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 570
    Points
    3 570
    Par défaut
    Tu passes bien dans le setter?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Oui, j'ai bien le "nouvelle valeur ---->" qui s'affiche dans la console ! Ce n'est donc pa ça, mais merci de ton aide !

  4. #4
    Membre habitué Avatar de YodaOne
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 76
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    Es tu sur qu'il passe bien sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.PropertyChanged(this, new PropertyChangedEventArgs("playerSourceAcc"));
    Vérifie que cette ligne soit exécutée pour moi le soucis dois venir de la.
    En enlevant la vérification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (this.PropertyChanged != null)
    tu seras fixé directement.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Merci de votre aide, mais ce n'est toujours pas ça. J'ai enlevé la ligne, mais il ne se passe rien (j'imagine qu'il m'aurait levé une exception de type null sinon).

  6. #6
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 570
    Points
    3 570
    Par défaut
    Tu crée le VM dans le XAML. Est-ce que tu en crée d'autres dans le code C# ou en XAML ? Si oui, tu es sûr que c'est la même instance de VM partout?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Un grand merci à toi, gruuMeditation, tu as résolu mon problème.
    En fait, je pensais que le XAML instanciais la classe PlayerViewModel une fois seulement, et la réutilisais à chaque fois que je précisais un datacontext.

    Du coup, je les ai tous ôté et j'instancie manuellement ma classe dans le code-behind de ma vue, puis je l'utilise pour la donner en datacontext à tous mes éléments. MERCI !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Binding window avec pattern MVVM
    Par Invité dans le forum Développement Windows
    Réponses: 1
    Dernier message: 01/03/2013, 11h54
  2. Réponses: 4
    Dernier message: 14/06/2011, 12h44
  3. Liaison de donnée à un Canvas via DataBinding et pattern MvvM
    Par satanasdiabolo dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 08/07/2009, 14h31
  4. Quel type de collection utilisez-vous pour le binding WPF ?
    Par FRED.G dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 04/07/2008, 21h55
  5. RichTextBox et Binding - WPF
    Par marma dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 16/05/2008, 15h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo