2010-12-10 36 views
0

J'ai une vue prisme/silverlight et il est mappé à un tabitem dans un contrôle onglet de mon shell. Cela ressemble à ceci.Création de plusieurs instances d'un viewmodel dans Prism/Silverlight

<sdk:TabControl> 
    <sdk:TabItem Header="User Portfolio" Regions:RegionManager.RegionName="MainRegion" /> 
    <sdk:TabItem Header="Benchmark Portfolio" Regions:RegionManager.RegionName="BenchRegion" /> 
</sdk:TabControl> 

La vue se compose d'une grille de données, zone de texte et un bouton de telle sorte que les cartes DataGrid à une ObservableCollection dans le viewmodel et lorsque le bouton est cliqué, le texte dans la zone de texte est ajouté à la grille de données (et correspondant collection).

Maintenant, je veux déclarer plusieurs instances de cette paire view-viewmodel. Autrement dit, dans Tabitem "MainRegion" je veux une instance. Dans tabitem "BenchRegion" je veux une autre instance

Comment est-ce que je fais ceci?

Répondre

0

Vous devez obtenir le conteneur, et pour chaque instance du modèle de vue, vous devez utiliser IUnityContainer.ResolveType<>() pour initialiser l'instance (assurez-vous d'enregistrer vos types en premier IUnityContainer.RegisterType<>()). Vous pouvez penser à ResolveType<>() comme la forme de Prism d'un constructeur. Ensuite, pour chaque vue, vous devez définir le datacontext sur votre modèle de vue initialisé pour cette vue.

Édition Je devrais noter que c'est pour Prism 2.0 Je sais qu'avec Prism 4.0 il existe des alternatives à l'unité.

+0

Bien que cela soit probablement implicite, mais enfin, vous devez ajouter chaque vue à la région respective. Une autre approche consisterait à enregistrer le type de vue dans chaque région; Ainsi, lorsque les régions sont affichées, les instances des vues (et, si elles sont effectuées correctement avec le modèle de vue en tant que dépendance de la vue, les modèles de vue) seront automatiquement créées pour chaque région. –

+0

oui j'ai supposé que s'il utilisait des régions il savait ajouter les vues aux régions :) –