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 :

passage WinForm en WPF avec MVVM


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 24
    Points : 20
    Points
    20
    Par défaut passage WinForm en WPF avec MVVM
    Bonjour, je reposte ici une disscussion que j'ai lancé sur les design pattern
    mais personne m'ayant répondus, peu etre que ce forum est plus a meme d'y parvenir

    je commence a me mettre a WPF,
    je voudrais migrer et poursuivre une application d'edition de sprite que j'ai commencer en Winform sous WPF en appliquent le pattern MVVM

    mon application est en 2 parties:
    - une Dll qui contient toutes mes classes de données, totalement indépendante, ( aucun système d'événements )
    - l'application, multi-panel un peu comme visual, ou chaque panel représente une partie des données: une panel pour la liste des animations, une pour la timeline de l'animation courante, un pour afficher la représentation graphique...
    pour unifier le tout, l'application possède un objet appelé UpdateManager , qui est le seul a modifier les données, et envoi des événements pour indiquer les modifications qu'il as effectuer, les views passant par lui pour modifier les données et écoutant les événements les intéressants pour se mettre a jour.

    mes questions sont les suivantes:
    - quel ou quels sont les models?
    - faut il un viewModel par Panel/View , ou comme a présent un seul suffit, les panels n'étant qu'une représentation partielle des mêmes données.


    merci d'avance

  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 : 38
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Je te suggère d'aller jeter un coup d'oeil au framework d'applications composites Prism: http://compositewpf.codeplex.com/
    Il repond pas mal à tes besoins et contient un exemple bien foutu

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Merci pour ta réponse je vais y jetter un coup d'oeil

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Je te suggère d'aller jeter un coup d'oeil au framework d'applications composites Prism: http://compositewpf.codeplex.com/
    Il repond pas mal à tes besoins et contient un exemple bien foutu
    Salut,

    Juste mon avis, je ne suggérerais pas ce framework à quelqu'un qui débute en WPF et surtout avec le pattern MVVM.

    Tout le monde sait que si on n'est pas un utilisateur avertit on risque de créer une usine à gaz avec Prism. Moi le framework que je proposerai serait MVVM Light Toolkit qui est plus facile à prendre en main (encore je le précise c'est juste un avis).
    Ce qui est bizarre avec Prism c'est que la plupart des gens confondent que Prism n'est pas seulement spécifique au pattern MVVM, il permet bien plus de choses par exemple on peut faire d'autre patterns avec tels que MVP (inutile pour WPF) surtout aussi qu'il permet aussi de mettre en place une application modulable. Aussi il faut noter que lorsqu'il s'agit d'un travail collaboratif, il se peut tout le monde n'ait pas la même connaissance du framework et cela peut avoir des conséquences au niveau du codage et surtout le non respect des règles pour ne pas casser l'architecture.

    En résumé :
    • Si ton application n'utilise pas de notions de plugins et que tu veux juste utiliser le pattern MVVM alors je te conseille MVVM Light Toolkit qui satisfera pleinement à tes besoins sans devenir une usine à gaz au moindre faux pas.
    • Si ton application est un système de plugins alors je te propose toujours de rester avec MVVM Light Toolkit. Pour les modules je te conseille Managed Extensibility Framework (qui est un framework dont le seul but est de créer une application modulable et pas comme Prism qui veut tout faire à la fois).


    quel ou quels sont les models?
    La couche Model sera représentée par la dll qui contient toutes tes classes métiers.

    faut il un viewModel par Panel/View , ou comme a présent un seul suffit, les panels n'étant qu'une représentation partielle des mêmes données.
    Sous réserve d'une confirmation par une autre personne, je dirai qu'il te faut un ViewModel par Panel et un ViewModel principal qui contiendra une instance de chacun des ViewModel associé aux panels que tu chargera à la demande que ton application soit modulable ou pas.

  5. #5
    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 : 38
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Certes, Prism est un peu complexe néanmoins il me semble très adapté à son application.
    Je ne parlais pas de la fonctionalité MVVM de Prism mais de son système de vues composites.

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    quel ou quels sont les models?
    La couche Model sera représentée par la dll qui contient toutes tes classes métiers.

    cela veut il dire que chacune de mes classes est en soit un modèle et devrais envoyer des événements a chaque changement, ou est ce que je peut tout centraliser dans un objet qui serais le point d'entrée de ma dll, qui s'occuperait de l'envoi des événements.
    en fait dans ma dll, mon point d'entree est un objet en plus de permettre l'acces au donnée, s'occupe de la liaison entre documents

    merci

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par dominiqueFaure Voir le message
    cela veut il dire que chacune de mes classes est en soit un modèle et devrais envoyer des événements a chaque changement, ou est ce que je peut tout centraliser dans un objet qui serais le point d'entrée de ma dll, qui s'occuperait de l'envoi des événements.
    en fait dans ma dll, mon point d'entree est un objet en plus de permettre l'acces au donnée, s'occupe de la liaison entre documents
    Ton model représente ta logique métier.
    Pour ce qui des évènements c'est au ViewModel de les gérer à travers des commandes.

    Pour avoir une petite idée de ce que permet le pattern je te conseille de lire ce tuto.

  8. #8
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    En résumé :
    • Si ton application n'utilise pas de notions de plugins et que tu veux juste utiliser le pattern MVVM alors je te conseille MVVM Light Toolkit qui satisfera pleinement à tes besoins sans devenir une usine à gaz au moindre faux pas.
    • Si ton application est un système de plugins alors je te propose toujours de rester avec MVVM Light Toolkit. Pour les modules je te conseille Managed Extensibility Framework (qui est un framework dont le seul but est de créer une application modulable et pas comme Prism qui veut tout faire à la fois).
    Je pousse cette idée/philosophie à 300% ! Pour moi, Prism est une grosse usine et je n'ai pas souvenirs avec rencontré un cas où MVVM Light + MEF + 2-3 autres briques ne permettait pas d'arriver aux mêmes résultats que Prism mais de façon bcp plus simple...

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Je pousse cette idée/philosophie à 300% ! Pour moi, Prism est une grosse usine et je n'ai pas souvenirs avec rencontré un cas où MVVM Light + MEF + 2-3 autres briques ne permettait pas d'arriver aux mêmes résultats que Prism mais de façon bcp plus simple...
    J'ai proposé cette idée du fait que j'ai eu à migrer un projet perso initialement en Winform vers WPF tout d'abords en utilisant Prism pour m'autoformer. Ensuite toujours en auto formation, j'ai refait la même chose en partant toujours du Winform vers du WPF mais cette fois avec MVVM Light + MEF.

    Pas de différences au niveau de l'implémentation du pattern , mais j'ai senti (c'est mon avis) une simplicité au niveau de la déclaration et de l'utilisation des plugins avec MEF

  10. #10
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    imaginons que j'ai 2 vues ouvertes sur le même document,
    donc 2 modelView qui modifient le même
    si mon modèle n'envois pas d'événement, comment le second saura il que les données ont étés modifiées?

    de meme mes données sont en pur c#, mes collections sont standard
    pour que mes listes se mettent a jour lours d'ajout suppression d'element
    faut il que je declare des ObservableCollection dans mon ModelView et copis les elements de mon modele ou y as il une autre solution?

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par dominiqueFaure Voir le message
    si mon modèle n'envois pas d'événement, comment le second saura il que les données ont étés modifiées?
    Si tu utilises PRISM ou MVVM Light, un système de Messagerie te permet de faire communiquer les Views avec les ViewModels.

    Citation Envoyé par dominiqueFaure Voir le message
    de meme mes données sont en pur c#, mes collections sont standard
    pour que mes listes se mettent a jour lours d'ajout suppression d'element
    faut il que je declare des ObservableCollection dans mon ModelView et copis les elements de mon modele ou y as il une autre solution?
    Les collections standards n'implémentent pas l'interface INotifyPropertyChanged alors que ObservableCollection si. Avec ObservableCollection, toute action d'ajout ou de suppression d'éléments renvoie une notification à toute View bindée sur cette collection. Donc le mieux c'est d'utiliser ObservableCollection.

  12. #12
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    donc, il faut que je crée une Observable collection dans mon ModelView
    et qu'a chaque modification du model j'ajoute ou remove des elements dans la collection

    c'est bien ca?

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par dominiqueFaure Voir le message
    donc, il faut que je crée une Observable collection dans mon ModelView
    et qu'a chaque modification du model j'ajoute ou remove des elements dans la collection

    c'est bien ca?
    C'est bien ça et les contrôles qui sont bindés sur ta ObservableCollection seront automatiquement mis à jour.

  14. #14
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    merci pour toutes ces réponses,

    je vais utiliser MVVM Light toolkit

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

Discussions similaires

  1. conseil passage application WinForm en WPF MVVM
    Par dominiqueFaure dans le forum Design Patterns
    Réponses: 1
    Dernier message: 01/04/2011, 18h10
  2. [WPF][C#] Problème de TreeView avec MVvM sans UserControl
    Par Manwë06 dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 05/10/2010, 13h23
  3. [C#/WPF] Visibility d'un élément avec MVVM
    Par Monkey56 dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 30/08/2010, 20h28
  4. passage winform en wpf
    Par nelb56 dans le forum Windows Presentation Foundation
    Réponses: 16
    Dernier message: 29/03/2010, 14h51
  5. Passage en mode protégé avec DPMI
    Par Hell_Hibou dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 09/09/2003, 19h04

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