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

C# Discussion :

MVVM et Binding


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur Junior développement logiciels
    Inscrit en
    Mai 2014
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Junior développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 198
    Par défaut MVVM et Binding
    Bonjour,


    Je n'arrive pas à comprendre le code suivant (provenant d'une vue en MVVM):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <ContentPresenter Grid.Column="4" Grid.Row="2" Grid.RowSpan="8" Margin="2" Content="{Binding Path=NouvellePersonne}" >
     
                <ContentPresenter.ContentTemplate>
     
                    <DataTemplate>
     
                        <View:PersonneInfoPersoView/>
     
                    </DataTemplate>
     
                </ContentPresenter.ContentTemplate>
     
            </ContentPresenter>
    De ce que je comprends la View PersonneInfoPersoView (dataTemplate) sera utilisé avec la variable NouvellePersonne qui est retournée par le ViewModel qui me donne ceci :

    Code : 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
     
    private PersonneViewModel _NouvellePersonne = null;
            public PersonneViewModel NouvellePersonne
     
            {
     
                get { return _NouvellePersonne; }
     
                set
     
                {
     
                    _NouvellePersonne = value;
     
                    if(_NouvellePersonne != null)
     
                        _NouvellePersonne.AfficherXXX = true;
     
                    RaisePropertyChanged(this.GetPropertyName(() => NouvellePersonne));
     
                }
     
            }

    Ma question est :

    Etant donné que je suis dans une vue avec son propre ViewModel, qui contient une autre Vue puis-je lui faire passer plusieurs arguments afin de pré-remplir des champs de cette autre Vue ?

    En gros, puis-je passer des arguments à un DataTemplate depuis le ViewModel de ma vue actuelle ?


    Merci,

    Ps : Si ce n'est pas clair faites moi signe j'essayerai de détailler

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Tu peux tout simplement initialiser l'instance NouvellePersonne avec les valeurs par défaut que tu veux.

    Par exemple je suppose que dans ton interface il y a un bouton pour ajouter une nouvelle personne qui peut faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    NouvellePersonne = new PersonneViewModel
    {
        DateInscription = DateTime.Now,
        Pays = "France",
        Secteur = "Informatique"
    }

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur Junior développement logiciels
    Inscrit en
    Mai 2014
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Junior développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 198
    Par défaut
    Il s'agit d'un code que j'ai récupéré, donc j’essaie de le comprendre.

    Le seul code que j'ai pu trouver concernant l'objet NouvellePersonne est le suivant :

    Code : 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
    private PersonneViewModel _NouvellePersonne = null;
            public PersonneViewModel NouvellePersonne
     
            {
     
                get { return _NouvellePersonne; }
     
                set
     
                {
     
                    _NouvellePersonne = value;
     
                    if(_NouvellePersonne != null)
     
                        _NouvellePersonne.AfficherXXX = true;
     
                    RaisePropertyChanged(this.GetPropertyName(() => NouvellePersonne));
     
                }
     
            }

    Je voulais donc être sûr que cette instruction instancie le DataTemplate avec la valeur NouvellePersonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <ContentPresenter Grid.Column="4" Grid.Row="2" Grid.RowSpan="8" Margin="2" Content="{Binding Path=NouvellePersonne}" >
                <ContentPresenter.ContentTemplate>
                    <DataTemplate>
                        <View:PersonneInfoPersoView/>
                    </DataTemplate>
                </ContentPresenter.ContentTemplate> 
            </ContentPresenter>


    De plus je voulais savoir si je pouvais passer des arguments supplémentaires à ce DataTemplate (View) afin de charger des listes de "Responsable de personne" récupérer via le ViewModel en cours d'utilisation.

    En gros accéder aux valeurs du ViewModel en cours dans le DataTemplate.

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Les seules données dont dispose le DataTemplate sont celles du "modèle" que tu lui transmets, en l’occurrence l'objet NouvellePersonne.

    Tu ne peux pas lui "passer des arguments supplémentaires", mais tu peux compléter ce que tu lui transfères soit en enrichissant PersonneViewModel soit en passant un autre modèle plus complet, et le modifier en conséquence pour les afficher.

    Donc il te faudra aussi modifier ce que j'imagine être un UserControl : PersonneInfoPersoView.

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur Junior développement logiciels
    Inscrit en
    Mai 2014
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Junior développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 198
    Par défaut
    Comment puis-je enrichir PersonneViewModel contient déjà beaucoup de fonctions en plus de celle que je vous ai donné.

    Celui-ci est liè au DataTemplate avec des bindings mais ceux-ci ne font rien.

    J'ai une liste de Personne qui est dans PersonneViewModel que je bind sur une combobox, mais en mettant un point d'arrêt cette méthode n'ai jamais appelé...

    Je ne comprends pas car j'ai vraiment beaucoup de fonction/obsevablecollection, mais en bindant je n'ai aucun retour ni d'appel de fonctions...

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Le principe est bien celui-ci : tout ce qui est rendu dans la vue vient du view-model.
    Donc si la propriété désirée, la liste, y est déjà présente la moitié du chemin est fait.

    Si c'est un problème de binding il faut regarder dans l'output lors de l'exécution, les échecs de binding y étant indiqués.

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

Discussions similaires

  1. [MVVM] ComboBox binding d'élément dont un null
    Par Monkey56 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 11/03/2011, 18h57
  2. [WPF][MVVM] GridView bindé un ReadOnlyCollection
    Par Monkey56 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 07/09/2010, 10h58
  3. MVVM et Binding d'objets contenant des listes d'objets
    Par Tanous dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 21/07/2010, 14h01
  4. Réponses: 12
    Dernier message: 22/04/2009, 11h17
  5. Blend / VS 2008 / MVVM : pas bon menage pour binding
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 09/04/2009, 08h19

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