2009-11-18 10 views
0

J'ai cette application Silverlight Prism qui utilise MVVM. Le modèle appelle un service WCF et une liste de données est renvoyée. Le ViewModel est lié à la vue, de sorte que le ViewModel doit avoir une propriété List.Où les données doivent-elles être stockées dans MVVM?

Devrais-je conserver les données renvoyées par un service WCF dans MVVM?

La propriété List doit-elle appeler le modèle à l'aide de son accesseur? Où le modèle a une méthode ReturnListOfData() qui renvoie les données stockées dans le modèle.

Ou ViewModel stocke-t-il les données après que le modèle ait terminé d'appeler le serveur?


C'est un suivi Where to put the calls to WCF or other webservices in MVVM?

Répondre

1

Cela dépend vraiment des autres aspects de votre application. Par exemple. comment les données retournées par ReturnListOfData() sont-elles utilisées? Y a-t-il d'autres composants qui l'intéressent? L'utilisateur met-il à jour les éléments de la liste? Peut-il créer de nouveaux éléments qu'il voudra sauvegarder plus tard?

Dans le cas le plus simple, vous avez juste une propriété List exposée par votre viewmodel à afficher, et vous devez réinitialiser cette liste à tout ReturnListOfData() retourné. Cela fonctionnera probablement pour un cas où l'utilisateur effectue simplement une recherche, ne fait rien ultérieurement, et il n'y a qu'une seule vue qui s'intéresse à ces données.

Mais supposons qu'un utilisateur veuille pouvoir modifier des éléments de cette liste. De toute évidence, vous devrez suivre les changements dans cette liste d'origine, alors lorsque l'utilisateur clique sur sauvegarder (ou annuler), vous enverrez au serveur uniquement les éléments qui ont été modifiés (ou ajoutés) ou restaurez les éléments d'origine si l'utilisateur les clics annulent. Dans ce cas, vous auriez besoin d'un objet Model, qui conserverait les données d'origine, alors votre viewmodel ne contiendra que sa copie.

4

En général, si je dois garder le modèle autour des objets (je considère la plupart des choses qui reviennent d'un service WCF un objet modèle) Je vais stocker dans mon ViewModel dans une propriété "Modèle".

J'ai vu des gens vont jusqu'à créer une propriété standard du modèle sur leur type de base ViewModel, comme celui-ci (je ne le fais pas, mais il est bon):

public class ViewModel<ModelType> : INotifyPropertyChanged ... 
{ 
    //Model Property 
    public ModelType Model 
    { 
      ... 
    } 
} 

Il est vraiment à toi. Les garder au plus près de leurs ViewModels est probablement la chose à emporter ici.

Questions connexes