2009-07-21 11 views
3

J'ai deux ViewModels qui présentent le même modèle à différentes vues. On présente le modèle comme un article dans un ListBox, l'autre le présente comme un onglet dans un TabControl. Le TabControl doit afficher les onglets pour les éléments sélectionnés dans le ListBox, de sorte que les onglets vont et viennent au fur et à mesure que la sélection change.État de partage entre ViewModels

je peux facilement synchroniser les deux contrôles en ajoutant une propriété IsSelected au modèle et liant les ViewModels à elle (un peu comme this), mais cela encombre le modèle avec des détails de présentation qui ne font pas vraiment là.

Il semble que j'ai besoin de quelque chose entre le Model et ViewModels pour conserver cet état supplémentaire. Existe-t-il des modèles ou des exemples d'un bon moyen de le faire?

Répondre

9

Utilisez un ViewModel.

Vous disposez d'une vue contenant les deux contrôles. Avoir un modèle de vue qui contiendra une liste de ViewModels pour le contrôle ListBox à lier. Toujours dans ce modèle de vue, liez la sélection de la liste à une deuxième liste de modèles de vue auxquels TabControl se lie également.

De cette façon, votre listbox gère ce que le contrôle de tabulation affiche sans cette information entrant dans le modèle qui devrait rester inconscient de l'existence de la vue.

+0

La vue qui contient les deux contrôles est un shell Prism et les contrôles sont dans des modules distincts, mais je pense que je peux appliquer le principe. Merci. – GraemeF

1

TabControl est ItemsControl, vous ne devriez donc pas hésiter à lier ses ItemsSource à ListBox.SelectedITems.

Il est évident que ViewModel pour la liste devrait avoir une propriété qui produirait ViewModel pour les onglets:

public TabViewModel ItemTabModel { get { ... } } 

Et parce que TabControl est un peu drôle, vous aurez besoin de ItemContainerStyle ajouter à remplir de contenu pour TabControlItem, parce que la normale ItemTemplate pour TableControl affecte uniquement les en-têtes pour les onglets.

Questions connexes