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 :

MVVM - Un ViewModel par View ?


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut MVVM - Un ViewModel par View ?
    Bonjour,

    J'ai une question assez simple mais j'ai besoin d'avoir des avis.

    Est-ce que vous développez un ViewModel pour chaque View lorsque vous utilisez le pattern MVVM?

    Dans notre application on procède de la manière suivante :
    -Une view pour la liste d'objets
    -Une view pour le détail d'un objet
    -Une view regroupant les deux précédentes (Master/Detail)

    Dans ce cas là, je voulais savoir ce que vous feriez ? personnellement j'étais parti avec un seul ViewModel contenant entre autres deux propriétés
    1. ObservableCollection<objet> mesObjets
    2. Objet monObjet


    Ainsi, ce que je faisais, c'est que j'avais ma vue de type Master/Detail qui définissait une instance de mon ViewModel en tant que DataContext. Ainsi, les deux UserControl que sont mes Views héritent du DataContext du Master/Detail.

    Le souci est que je ne sais pas ce que ça vaut si on veut réutiliser un des deux UserControl dans une autre vue par exemple.

    Merci de partager votre opinion/expérience.

    Cordialement,

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    ViewModel = modèle de la vue

    Donc oui, en principe c'est un ViewModel par vue. Après, on peut bien sûr adapter un peu selon le besoin...

    Le souci est que je ne sais pas ce que ça vaut si on veut réutiliser un des deux UserControl dans une autre vue par exemple.
    Bah je crois que tu as répondu toi-même à la question... si tu veux pouvoir réutiliser le UserControl ailleurs, il ne faut pas qu'il dépende du ViewModel d'une autre vue

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    Bonjour,

    Merci pour ta réponse, dans ce cas là, comment fait-on pour communiquer entre les différentes vues ? n'y a-t-il pas un moyen de faire du binding directement via le xaml plutôt que de passer par des évènements ?

    Ce que je veux faire :
    -un ViewModel contient une ObservableCollection<Objet> Objects ainsi qu'un Objet CurrentObject
    -Un ViewModel contient un Object MyObject
    -Le troisième ViewModel doit transmettre au deuxième ViewModel le CurrentObject du premier à chaque changement
    Ce même troisième doit fournir au premier toutes modifications effectuées dans le deuxième.

    Classique gestion de MasterDetail avec d'une part une Liste d'objets et d'autre part le détail de l'objet sélectionné dans la liste

    Merci d'avance

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ben là c'est une communication entre les ViewModels alors, pas entre les vues...

    Soit les ViewModels ont des références les uns vers les autres, dans ce cas la communication est triviale (via des méthodes, propriétés, évènements)
    Soit les ViewModels sont découplés et "ne se connaissent pas", dans ce cas tu peux utiliser un mécanisme type Messenger/Mediator (par exemple le Messenger de MVVM Light) : un ViewModel publie des messages d'un certain type, et les autres s'abonnent à ce type de message, sans savoir qui le publie

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    Merci beaucoup pour ta réponse.

    Du coup j'ai gardé la solution des évènements qui est la plus simple au final

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

Discussions similaires

  1. MVVM - Events envoyés par un ViewModel
    Par dotixx dans le forum C#
    Réponses: 3
    Dernier message: 13/11/2012, 08h41
  2. [MVVM] Réutilisation d'une view
    Par rvzip64 dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 03/10/2011, 12h54
  3. MVVM - Dispose ViewModel
    Par CaptainChoc dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 22/09/2011, 14h18
  4. MVVM Master et Detail View
    Par Mozofeuk dans le forum Silverlight
    Réponses: 4
    Dernier message: 17/12/2010, 17h31
  5. MVVM : Classes ViewModel et classes Métiers ?
    Par Invité dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 04/05/2009, 14h38

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