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 ViewModel multiples


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Novembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut MVVM ViewModel multiples
    Bonjour,
    Je découvre le pattern MVVM, et je bute sur un problème d'instanciation:
    D'après ce que j'ai lu sur le sujet, c'est le Viewmodel qui instancie les classes du modèle.

    Dans mon cas, j'ai un Viewmodel principal, qui est hérité par d'autres Viewmodels, en charge du binding vers des contrôles utilisateurs.
    Le Viewmodel principal contient des méthodes communes, utilisées par les Viewmodels dérivés.

    La question apparait quand il s'agit d'instancier mon modèle:
    - Si je l'instancie dans le Viewmodel principal, les Viewmodels dérivés instancient chacune un modèle.
    - Si je l'instancie dans un des Viewmodels dérivés, les autres Viewmodels ne voient pas l'instance.
    - Et si je déclare le modèle dans le Viewmodel principal, et l'instancie dans un Viewmodel dérivé, les autres Viewmodels voient un objet non instancié
    (NullReferenceException)

    Est-ce que j'ai raté quelque chose ? Est-ce que cette architecture est insensée ?
    J'avoue ne plus savoir dans quelle direction aller...

    Merci d'avance de vos lumières

  2. #2
    Membre éprouvé
    Homme Profil pro
    Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique
    Inscrit en
    Décembre 2014
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur Systèmes, Clouds et Réseaux /CAO/DAO/Ingénierie Electrotechnique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 449
    Points : 993
    Points
    993
    Par défaut
    - Bon, moi je t'avoue que ça aurait été plus simple si tu nous avais donné un peu de code, car là comme ça en pur théorique c'est chaud bouillant.
    Le binding des commandes, puisque tu parles controles je présume que tu parles donc des routeduicommand par exemple ? Pour ma part c'est en static, "public static readonly RoutedUiCommand MachinCommand = new ...."

    ça je vais le mettre dans la classe qui est donc une classe qui complète ta classe de fenêtre "ma fenêtre" avec une partie en xaml, l'autre en c# et une autre qui normalement est en génération procédurale, cette partie en c# hérite de la classe Window.


    - Concernant ce que je veux mettre comme classe qui va hériter ça va être au niveau du Modèle, ce que tu passes comme datacontext. Donc de là tu vas pouvoir passer des instructions de traitement, certaines que tu vas laisser dans ton première modèle vu qu'elles seront reprises dans les autres, et du coup tu peux par exemple te permettre de débuter sur une classe abstraite "abstract". De là en fait si je t'en parle c'est qu'il y a des mots clés à connaître dans l'héritage, virual, override, new par exemple .. Je dirais que c'est les plus fréquents. Parce que sans ça en fait dans ton programme tu peux hériter mais dans la gestion entre la classe mère et la classe fille tout dépend de quitu veux qui soit appelé automatiquement... Si je mets une méthode en virtual par exemple, il va me prendre la dernière de la classe fille si je mets un override... il ne lira pas la méthode de la classe de base (ce qui est pratique donc quand on désire fixer un pattern de départ pour le modèle et permettre une grande souplesse derrière en héritant de cette classe pour ne pas avoir à tout réécrire, on va modifier juste certaines portions pour faire faire cette part là que l'on veut être gérée différemment.

    J'avais oublié, en fait ton datacontext, tu peux lui assigner this, pour que les bindings se fassent sur la classe qui hérite donc de window en c# mais tu peux le mettre sur une autre classe qui va s'occuper de contenir des données, avoir des méthodes etc... Et personnellement je préfère de loin cette dernière option si j'ai de l'héritage à faire, vu déjà qu'en héritant de window je ne pourrais pas faire hériter d'une classe abstraite je ne pourrais qu'avoir une interface. Et pour les commandes je t'ai expliqué comment je faisais poru ma part, dans le wpf ce n'est pas très compliqué tu vas simplement mettre les balises CommandBindings juste après le chevron fermant window.

    Exemple:
    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        <Window.CommandBindings>
            <CommandBinding Command="local:Common.ProcessCommand" CanExecute="Can_Process" Executed="Exec_Process"/>
        </Window.CommandBindings>



    Bon j'espère t'avoir un peu apporté un élément de réponse, à la limite ça sera peut être plus facile de t'aider si tu mets un peu de ton code ou que tu expliques un peu mieux au travers de ce que tu veux faire. Ou c'est peut être moi qui n'arrive pas encore à me représenter quand c'est totalement abstrait comme là, après je n'ai pas comme cursus principal l'informatique donc je peux peut être me planter, tu as des gens comme Pol63 qui sont des références sur le sujet.

    Un article sympa à lire : https://www.dotnetdojo.com/mvvm/

Discussions similaires

  1. [Débutant] WPF MVVM, ViewModel d'initialisation
    Par tseki dans le forum C#
    Réponses: 0
    Dernier message: 26/06/2015, 11h39
  2. WPF MVVM, ViewModel à besoin de la vue
    Par EpiTouille dans le forum C#
    Réponses: 2
    Dernier message: 05/05/2015, 16h13
  3. [MVVM] ViewModel commun à deux Views
    Par DotNET74 dans le forum Windows Phone
    Réponses: 9
    Dernier message: 31/03/2011, 13h30
  4. 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