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 :

Stratégie pour une application avec plusieurs vues "empilées"


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 657
    Points : 1 237
    Points
    1 237
    Par défaut Stratégie pour une application avec plusieurs vues "empilées"
    Bonjour je travaille sur un petit gestionnaire de snippet ( notes ) et je cherche des idées pour l'organisation de ma vue.

    J'ai une vue principale , une liste de snippets , puis des vues "auxilaires" ( formulaire d'ajout , d'édition , écran de configuration de l'application").

    En gros , une seule vue ne peut être visible à la fois.

    Comment organiser tout ça ? ( je suis sur un MVVM basique avec RelayCommand et ViewModelBase ).

    Solution 1/ avoir un champ ViewModelContainer de type ViewModelBase dans le ViewModel de la fenêtre principale , et changer la valeur suivant la vue à afficher, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ViewModelContainer = new Form1ViewModel() ;
    puis pour changer de vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ViewModelContainer = new Form2ViewModel();
    le problème est que ça complique la gestion des commandes dans les vues correspondantes ( NullRef exceptions à tout va lors de l'éxecution de fonctions CanExecute quand on change de vues ).

    Je cherche donc d'autres stratégies pour gérer mes différentes vues , la seule condition est de rester avec un MVVM light. Toute info bienvenue ( liens , code , etc ... ).

  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
    C'est dommage que tu te limites a mvvm toolkit (non pas qu'il n'est pas bien) car il y'a des morceaux de Prism qui pourraient t'être utiles!

  3. #3
    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 : 43
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Il suffit de mettre un ContentControl et de définir des DataTemplates pour chaque type de ViewModel, sans préciser de clé. Ca pendra automatiquement le template qui va bien en fonction du ViewModel que tu mets dans le ContentControl

  4. #4
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    +1 pour l'idée de tomlev.

    Tu as aussi un bon article qui te donneras des exemples/idées : http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

    Bon courage,

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 657
    Points : 1 237
    Points
    1 237
    Par défaut
    @PitMaverick78
    Je connais un peu PRISM, mais j'essaie d'utiliser un framework light pour commencer.
    @tomlev
    C'est déja ce que je fais , mais je voulais trouver d'autres techniques.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <Window.Resources>
    	<DataTemplate DataType="{x:Type vm:SnippetAddFormViewModel}">
    			<local:SnippetAddFormView  />
    		</DataTemplate>
    		<DataTemplate DataType="{x:Type vm:SnippetEditFormViewModel}">
    			<local:SnippetEditFormView />
    		</DataTemplate>
    		<DataTemplate DataType="{x:Type vm:SnippetListViewModel}">
    			<local:SnippetListView/>
    		</DataTemplate>
    	</Window.Resources>
    ...

    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
    <ContentControl Content="{Binding ViewModelContainer}"
    										Margin="4"
    										x:Name="MyViewModelContainer"
    										Grid.Row="2"/>
    		<ContentControl Content="{Binding SnippetListViewModel}"
    										Margin="4" 
    										Grid.Row="2">
    			<ContentControl.Resources>
    				<Style TargetType="{x:Type ContentControl}">
    					<Setter Property="Visibility"
    									Value="Hidden" />
    					<Style.Triggers>
    						<DataTrigger Binding="{Binding ViewModelContainer}"
    												 Value="{x:Null}">
    							<Setter Property="Visibility"
    											Value="Visible" />
    						</DataTrigger>
    					</Style.Triggers>
    				</Style>
    			</ContentControl.Resources>
    		</ContentControl>
    Je vais peut être essayer de customiser un tab control sans le header pour qu'il m'affiche des vues qui s'empilent, mettre les vues dans une collection qui permet d'ordonner les viewmodels et changer la visibilité selon l'ordre des vues , ou alors il existe déja un composant pour ce faire?

  6. #6
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Hello,

    Je pense que tu devrais orienter tes recherches vers un système MDI en WPF.

    Voici déjà un lien :
    projet codeplex : http://wpfmdi.codeplex.com/


    Bon courage,

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 657
    Points : 1 237
    Points
    1 237
    Par défaut
    je vais voir avec Mdi , merci.

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

Discussions similaires

  1. Faire une application avec plusieurs écrans
    Par JCMANSION dans le forum Android
    Réponses: 16
    Dernier message: 25/11/2010, 23h02
  2. Réponses: 2
    Dernier message: 11/02/2008, 20h22
  3. [Compiler] Compiler une application avec plusieurs fichiers m
    Par ploukinet dans le forum MATLAB
    Réponses: 3
    Dernier message: 10/05/2007, 18h34
  4. [MFC]Application avec plusieurs vues
    Par tus01 dans le forum MFC
    Réponses: 2
    Dernier message: 22/02/2006, 17h17

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