2011-03-25 3 views
0

Je souhaite réduire le nombre de commandes de ma classe ViewModel. J'ai un ViewModel qui contient plus de 5 listes (utilisant Listboxes sur View pour présenter, et je lie un ObservableCollection à son paramètre ItemSource, liant également la propriété SelectedItem), et chaque liste devrait avoir son propre bouton Add/Remove/etc .Commandes Silverlight MVVM

Ainsi, il ressemble à ceci:

public class PersonViewModel : ViewModelBase 
{ 
    Person _Person; 
    private ObservableCollection<WorkPlaceViewModel> _WPlaces; 
    private ObservableCollection<LanguageViewModel> _Languages; 
    ... other lists 

    private WorkPlaceViewModel _SelectedWorkPlaceView; 
    ... 

} 

Ajout commande 5x2 fait ViewModel un peu grand. Je pourrais coder une chaîne dans le CommandParameter et le gérer avec un switch-case dans mon ViewModel mais cela ressemble à du piratage. : p Ou devrais-je créer une commande Remove pour chaque listbox et passer l'objet SelectedItem en tant que paramètre?

Quel est le meilleur moyen pour cela dans MVVM?

Répondre

1

Pourquoi avez-vous une collection de viewmodels dans votre viewmodel? Qu'est-ce que PersonViewModel est supposé accomplir? Il me semble que vous devez diviser votre vue en plusieurs vues et les lier à différents modèles de vue. Vos vues et modèles de vue doivent être aussi petits que possible pour réduire le couplage. Cela dit, je recommanderais des commandes pour ajouter/supprimer sur chaque collection observable. L'utilisation d'une chaîne de caractères est désordonnée, comme vous l'avez deviné. Si chaque collection observable a son propre ajout/suppression qui permettra une logique différente pour chaque collection et est plus maintenable.

Pouvez-vous poster plus de code à partir de votre ViewModel et décrire l'application un peu? Cela nous aidera à déterminer s'il pourrait y avoir une meilleure décision de conception.

+0

L'objectif est de créer une page de profil pour un employé. Sur la page de profil, les lieux de travail précédents, les informations sur l'éducation, les compétences, etc. sont visibles dans les zones de liste. Chaque lieu de travail, éducation, etc. a sa propre classe de modèles et sa propre machine virtuelle. Je suis en train de réécrire le code, en plaçant les ObservableCollections dans des classes séparées (au lieu de OCollection de WorkPlaceViewModels dans PersonViewModel, j'utiliserai un WorkPlaceListViewModel), et j'y implémenterai les commandes. De cette façon, ces ListViewModels géreront leurs commandes, au lieu du PersonViewModel. – npalotai