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

Silverlight Discussion :

Respecter MVVM avec WCF (datacontract datamember)


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 436
    Par défaut Respecter MVVM avec WCF (datacontract datamember)
    bonjour à vous tous !

    Ma question est simple mais avant de vous la soumettre je vais vous exposer le contexte.

    Donc j'ai une application silverlight avec une architecture MVVM. J'ai aussi un webservice wcf.

    Dans le service web j'ai plusieurs classes qui utilisent les attributs Datacontract / Datamember etc.

    Dans mon application silverlight, j'ai des view et des viewmodels.

    Admettons la classe suivante dans le service web (code écrit directement à la main pour schématiser l'exemple afin que vous voyez où je veux en venir)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [DataContract] MaClasse {
     
     [DataMember]   int  Id {get;set;}
     [DataMember]   string Libelle {get;set;}
     [DataCollection] ObservableCollection<UneAutreClasse> Liste {get;set;}
    }
    Ma vue (côté silverlight) a une datagrid avec pour ItemsSource une ObservableCollection<MaClasse>. Dans cette datagrid, il y a une column de type combobox. Cette combobox a pour ItemsSource MaClasse.Liste.

    Ma question est la suivante : où placer la property SelectedUneAutreClasse bindé sur la property SelectedItem de la combobox ?

    1) Dans le viewModel ? Ce qui implique d'avoir une collection de SelectedItem car pour chaque Row, j'ai un SelectedUneAutreClasse.

    2) Dans la classe côté service ? Mais dans ce cas j'ai l'impression de violer les principes de MVVM car je déporte les éléments de mon viewModel dans ma classe côté webservice. De plus, les webservices étant utilisés par d'autre appli (ASP.NET classique) donc ils auront des classes contenant les SelectedItem sans forcément en avoir l'utilité.

    3) En utilisant les class partiels j'ai le même problème que pour le 2) mais à la différence que je peux avoir un fichier propre et un fichier extension qui contient les selected item etc.

    4) Obi wan kenobi

    5) autre ...

    Pour plus d'info qui vous aiderons à me répondre, je possède des classes très grandes et avec beaucoup de liste encapsuler à l'intérieur donc beaucoup de SelectedItem à placer.

    Merci beaucoup d'avance. ++ à vous tous ! Et vive silverlight et à ba les balises html 5 propriétaires (ou alors ptête un big up car ça donne un argument de plus pour rester sur silverlight )

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    J'ai pas de solution mais j'ai du mal à saisir l’intérêt du selected de la combobox d'un point de vue fonctionnel.

    Pour moi, tel que je vois la structure de MaClasse, la liste des AutreClasses à un intérêt métier et chacune d'entre elle est liée à ta classe.

    Le fait d'avoir un selectedAutreClasse c'est comme si tu ne voulais en garder qu'une seul.

    Quelque chose m'échappe

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 436
    Par défaut
    Salut micka132 ! Merci de ta réponse c'est vraiment très gentil de ta part.

    Un bon bout de xaml t'aidera à mieux comprendre :

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <telerik:RadGridView ItemsSource="{Binding ListeObjetMaClasse}">
     
    <telerik:RadGridView.Columns>
    	<telerik:GridViewDataColumn Header="Id" DataMemberBinding="{Binding MaClasse.Id}" />
    	<telerik:GridViewComboBoxColumn Header="liste dans une combobox" ItemsSource="{Binding MaClasse.ListeUneAutreClasse}" SelectedItem="{Binding MaClasse.MonItemSelectedPourCetteRow}" />
    </telerik:RadGridView.Columns>
     
    </telerik:RadGridView>

    Ensuite, dans le xaml j'ai des boutons qui permettent d'interagir avec l'élément selected de la combobox de la row selected.

    Est-ce que cela te semble-t-il plus clair ? Merci !

    Edit : j'ai aussi plusieurs classes car plusieurs propriétés de MaClasse sont réutiliser dans d'autre classe et pas l'intégralité du contenu de MaClasse. SelectedUneAutreClasse est une propriété de type UneAutreClasse

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    C'est bien ce que j'avais compris, et que je ne comprend pas.
    Quel est l'interet d'avoir une collection<AutreClasse> dans MaClasse si en fait tu n'as besoins que d'un domaine de valeur?

    Moi ce que je comprend en langage inexistant ou MaClasse=RendezVous et AutreClasse=Jour :
    RendezVous
    { ...
    SelectedJour=Jour{Lundi}

    Collection<Jour>{ Jour{Lundi},Jour{Mardi],Jour{Mercredi]....}.
    }
    Pour chaque instance de RendezVous ce qui m'interesse c'est pas d'avoir la liste des jours disponibles mais uniquement le SelectedJour non?

    Bon peut être que je t'éloigne de la question.
    Sinon moi je rajouterai cette propriété dans le ViewModel. Le viewModel etant une modification de MaClasse (ajout ou suppression de propriété...).

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 436
    Par défaut
    En fait j'ai une liste car ma grid est ainsi :

    Col 1 : un id
    Col 2 : une combobox avec une liste d'objet et un selected item
    Col 3 : une combobox avec la liste de valeur possible pour le selected item de la combo précédente, un selecteditem2 pour cette deuxieme combo.

    du coup ma classe contient une liste de valeur qui dépend de la col 2. C'est cette liste qui est dans MaClasse.

    En effet la première combo est une liste statique sur qui pointent toutes les col 2 de la grid. Mais j'ai besoin d'une liste par row dans ma classe pour stocker la col 3. Non ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Par défaut
    Bonjour Kikuts,
    Est-ce que l'idée principale est donc de modifier le contenu de la liste de la combo2 après selection d'un item de la combo1 ?

    Si c'est bien celà, je pense que tu devrais prendre le problème sous un autre angle (doù le questionnement de Micka132).

    Au lieu de générer une liste dans laquelle tu inclus une seconde liste, tu devrais plutôt garder les 2 listes disctinctes. la liste2 (liée à la combo2) contiendra tous les items possibles et tu génères un filtre sur cette dernière via une requête linq après sélection de l'item du combo1.

    regarde ici
    .

Discussions similaires

  1. Pousser des donnees depuis le serveur vers plusieurs clients avec WCF
    Par NoussaL dans le forum Windows Communication Foundation
    Réponses: 6
    Dernier message: 30/09/2008, 17h11
  2. Téléchargement de fichiers avec WCF
    Par BATCHOS CON TEQUILA dans le forum Windows Communication Foundation
    Réponses: 3
    Dernier message: 18/08/2008, 17h31
  3. WCF - Problème avec les DataContract
    Par ophalia dans le forum Windows Communication Foundation
    Réponses: 3
    Dernier message: 07/10/2007, 20h03

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