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 - Synchronisation entre Model et ViewModel


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 163
    Par défaut MVVM - Synchronisation entre Model et ViewModel
    Bonjour,

    J'aimerais pouvoir modifier le Model via le ViewModel, et inversement, si le Model est modifié, mettre à jour le ViewModel.

    Par contre, j'ai un souci sur la méthode à utiliser :
    • soit on expose directement le Model (ce qui n'est pas très propre),
    • soit on encapsule chaque property du Model dans une property du ViewModel (ce qui peut être un peu lourd),
      Example de code dans le ViewModel
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      public string MyProperty
      {
              get { return Model.MyProperty; }
              set
              {
                  Model.MyProperty= value;
                  NotifyPropertyChanged("MyProperty");
              }         
      }


    Je voulais savoir s'il existait une méthode plus générique pour synchroniser Model et ViewModel ?

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Le modèle implémente-t-il INotifyPropertyChanged?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 163
    Par défaut
    Oui, le modèle implémente INotifyPropertyChanged.
    J'avais éventuellement pensé à abonner le ViewModel au PropertyChanged du Model. A chaque notification du Model, le ViewModel ferait une notification de son propre PropertyChanged, le ViewModel servirait alors juste de relais.
    Par contre, cela implique d'utiliser les mêmes noms de propriétés dans le ViewModel que dans le Model.

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par al2000 Voir le message
    Oui, le modèle implémente INotifyPropertyChanged.
    J'avais éventuellement pensé à abonner le ViewModel au PropertyChanged du Model. A chaque notification du Model, le ViewModel ferait une notification de son propre PropertyChanged, le ViewModel servirait alors juste de relais.
    Par contre, cela implique d'utiliser les mêmes noms de propriétés dans le ViewModel que dans le Model.
    Effectivement, c'est ce que je ferais

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    Tu peux à ce moment là être un peu plus subtile et peut-être utiliser une notion de PropertyObserver telle que définie dans la mvvmfoundation lib.
    C'est l'implémentation de cette idée.

    Ca te permet par exemple de faire écouter ton viewmodel aux modifications du model, propriété par propriété (le modèle devant aussi implémenter INotifyPropertyChanged), mais tu peux te passer d'utiliser les mêmes noms => utilisation de lambdas pr résolution de nom et les erreurs seront détectables à la compil'.

    Attention, je ne sais pas quelle techno tu utilises, mais si tu utilises silverlight, il te faudra implémenter un PropertyChangedEventManager, voir ici.

    PS: De la même manière, je te conseille d'utiliser les lambdas pr tes notifications. En cas de refactorisation de code, tu n'auras pas de mauvaises surpirses
    Au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NotifyPropertyChanged("MyProperty");
    utiliser un truc genre (dispo un peu partout, comme dans la mvvmlight lib):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NotifyPropertyChanged(()=>MyProperty)

Discussions similaires

  1. [WPF - MVVM] Communications entre ViewModels
    Par NeoKript dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 06/02/2012, 14h06
  2. MVVM - Mise à jour Model - ViewModels
    Par CaptainChoc dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 22/09/2011, 22h15
  3. Réponses: 6
    Dernier message: 13/09/2005, 18h59
  4. Synchronisation entre 2 threads
    Par bodbod dans le forum C++
    Réponses: 8
    Dernier message: 20/08/2004, 18h29

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