2009-06-29 5 views
1

J'apprends MVVM en utilisant l'échantillon créé par Josh Smith à http://msdn.microsoft.com/en-us/magazine/dd419663.aspx Je voulais ajouter une fonctionnalité de mise à jour dans le code existant,MVVM ouverture nouvel espace de travail Autre espace de travail (au lieu de Main ControlPanel)

Comme quand voit l'utilisateur les données sur la grille de l'utilisateur 'Tous les clients' peuvent modifier un enregistrement particulier en double cliquant dessus, un double clic ouvrira un nouvel onglet (même mode view/view que celui utilisé pour le nouveau client). Je n'ai aucune idée de comment le faire, dois-je l'appeler par mainwindowviewmodel ou il y a une autre façon.

Merci à tous et Bonne programmation

Gaurav Joshi

Répondre

1

Il est un peu impliqué, donc nous allons prendre une chose à la fois:

La première chose que vous devez faire est de laisser la Afficher le modèle sait quel élément est sélectionné. Pour ce faire, vous devrez ajouter une propriété IsSelected au Client

public bool IsSelected { get; set; } 

(Edit: Comme cela a été souligné à moi, la classe CustomerViewModel a déjà cette propriété, de sorte que ce qui précède n'est pas nécessaire ce projet particulier - bien que ce soit en général.)

Vous devez ensuite numéroter la propriété IsSelected sur les éléments de ListView. Une façon de le faire est à travers un style qui cible le client. Quelque chose comme ceci:

<Style x:Key="CustomerListStyle" TargetType="{x:Type ListViewItem}"> 
    <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" /> 
</Style> 

puis attribuez-lui ce style en utilisant le ItemContainerStyle de ListView:

<ListView ItemContainerStyle="{StaticResource CustomerListStyle}" ...> 

Pour pouvoir modifier un client sélectionné, vous devez ajouter une commande à EditCostumer AllCustomersViewModel. Implémentez cette commande à l'aide de RelayCommand pour afficher la vue d'édition de l'élément sélectionné.

Vous pouvez utiliser LINQ pour rechercher le client ayant IsSelected == true.

+0

Salut Mark, Merci pour votre message et Désolé, je suis en train d'écrire dans les commentaires, n'a pas trouvé d'autre moyen sur stackoverflow pour répondre. Pensez-vous qu'il est correct de déclarer static 'workspace' et de créer une nouvelle commande dans customlookmodel self qui créera un nouvel espace de travail et l'ajoutera à l'espace de travail mainwindowviewmdodel. De cette façon, il ne doit pas être implémenté. Je veux juste quelques entrées expertes Merci Gj – Gaurav

+0

En général, j'essaie de rester à l'écart de la statique autant que possible, car elle a tendance à nuire à la testabilité, à la flexibilité et à l'OO-ness générale. Le point entier de ViewModels est qu'ils modélisent des vues. Vous ne pouvez pas avoir un modèle par vue s'il n'y a aucune instance du modèle. Il se peut qu'il n'y ait qu'un seul Workspace, mais je dirais que l'utilisation de la statique va à l'encontre de toute la philosophie de MVVM. Je sais que mon raisonnement semble un peu vague, mais ce ne sont que des considérations générales basées sur des années d'expérience :) –

+1

Mark. Le seul problème que je vois dans votre réponse est que vous recommandez de placer la propriété IsSelected dans le modèle client. Je pense qu'il devrait aller dans la classe CustomerViewModel parce que c'est une propriété orientée GUI, et un objet modèle client n'a vraiment aucun concept de ce que signifie être sélectionné. –

Questions connexes