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 fenêtre unique


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 fenêtre unique
    Bonjour,


    Je cherche à développer une application avec une seule fenêtre, mais dont le contenu va changer.
    Imaginons que j'ai une fenêtre avec plusieurs boutons qui vont avoir pour effet de changer entièrement le contenu de ma fenêtre pour par la suite revenir sur l'accueil via un bouton accueil disponible sur mes différentes vues.

    Je voudrais faire cela en respectant le MVVM au maximum.

    Je vous demande donc s'il existe un tuto ou quelqu'un qui sait comment faire, car je n'ai aucune idée de comment prendre la chose (voir même de la commencer).


    Merci d'avance pour votre aide.

  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
    Le MVVM est utile à un autre niveau : entre chaque vue et ton modèle.
    Là tu as une problématique purement visuelle de navigation.

    Regarde du côté des API de navigation fournies par WPF : NavigationWindow et Page notamment.

    Si tu as seulement 2 vues c'est pê un peu overkill donc là tu peux te contenter d'un simple ContentControl qui contiendra la vue actuelle.
    Comme ça tu as en fait une seule vue "globale" qui gère notamment les menus.

  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
    Le problème est que si j'ai plus de fenêtre à créer, comment dois-je faire ?

    Mais je demande sa car je travail sur une application qui a plus de fenêtres et je n'arrive pas à saisir le fonctionnement de celle-ci.
    A l'heure actuelle elle change le view modèle courant mais je n'arrive pas à détecter ou se fait le changement de vue...

  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
    Je ne sais pas comment est conçue cette application mais tu aurais typiquement :
    - une HomeView avec son HomeViewModel
    - une OtherView avec son OtherViewModel
    - une AnotherView avec son AnotherViewModel
    - une YetAnotherView avec son YetAnotherViewModel
    ...

    Tout ce qu'il y a à faire c'est changer le Content du ContentControl pour utiliser l'une de ces vues :
    - soit tu y vas à la bourrin en exposant globalement celui-ci, via la MainWindow typiquement, et tu le manipule directement depuis les gestionnaires de clic sur les boutons de navigation
    - soit tu utilises des évènements routés (voire des commandes) pour notifier de la demande de navigation et tu enregistres un handler au niveau de la MainWindow

  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
    Est-il possible de binder le contentcontrol sur un ViewModel qui changerait et donc modifierai la fenêtre ?

    Car c'est ce qu'il semble être fait dans ce cas ?

    car j'ai trouvé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Content="{Binding PageCourante,
                                                  Mode=OneWay}"
                                ContentTemplate="{Binding PageCourante.Template,
                                                          Mode=OneWay}" />

    PageCourante serait donc un ViewModel qui retournerai sa View. (Template)

    Est-ce que je me trompe ?

  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
    Oui tu peux faire ça mais pour moi c'est abuser du MVVM et risquer de complexifier.
    "Mon approche"© :
    - conserve l'état de navigation global dans une classe dédiée, e.g. Navigation, contenant un UserControl CurrentView
    - bind ton Content à cette CurrentView
    - change l'instance de CurrentView au gré de la navigation initiée par l'utilisateur.

    Dans le cas simple tu as une barre de navigation unique au niveau de la MainWindow qui te permet d'accéder aux différentes vues via autant de boutons (templatés comme il faut pour que ça ait un peu de gueule ).
    Sinon si tu as des patterns de navigation plus complexes avec possibilité de conserver un historique tu peux profiter des composants de navigation de WPF.

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

Discussions similaires

  1. [Python 3.X] Rendre une fenêtre unique
    Par Khar14 dans le forum Tkinter
    Réponses: 3
    Dernier message: 29/09/2014, 09h15
  2. [Lazarus] Fenêtre unique de développement
    Par rupteur dans le forum Lazarus
    Réponses: 2
    Dernier message: 08/09/2014, 11h47
  3. Fenêtre unique pour JDialog mais non modale
    Par Marc_3 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 25/01/2013, 16h18
  4. Réponses: 6
    Dernier message: 09/08/2007, 21h41
  5. champ unique dans fenêtre indépendante
    Par burnout69 dans le forum Access
    Réponses: 12
    Dernier message: 07/09/2006, 21h37

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