2011-08-06 1 views
1

J'ai deux questions à propos du scénario ci-dessous: Pourquoi la région n'a-t-elle pas été initialement ajoutée à la collection de la région?Affichage non affiché dans la région

Pourquoi la vue n'est pas affichée dans la région ... ou comment puis-je la résoudre?

Voici le problème: Dans Prism pour WPF, j'ai une fenêtre qui agit comme un popup. Cette fenêtre a un contrôle utilisateur qui utilise l'attribut region. Pour une raison quelconque, la région de cette fenêtre n'apparaissait pas dans la collection de la région.

Pour obtenir la région de la fenêtre dans la collection de région, je l'ai fait à travers le code. Dans le module qui déclenche l'apparition de cette fenêtre, je fais:

IRegion region = new SingleActiveRegion(); 
myRegionManager.Regions.Add("MainWindowRegion", region); 
myContainer.Resolve<someViewModel>().Initialize(); 
SomeView someView = myContainer.Resolve<SomeView>(); 
SomeViewModel someViewModel = myContainer.Resolve<SomeViewModel>(); 
someView.DataContext = someViewModel; 
myRegionManager.Regions["MainWindowRegion"].add(someView, "SomeView"); 

La région apparaît maintenant dans la collection de la région, ainsi que toutes mes autres régions. Cependant, someView ne s'affiche jamais dans la région.

Répondre

0

Première:

Où êtes-vous ajoutez votre point de vue et viewmodels à l'unité? Vous devriez le faire dans le cadre de l'initialisation de votre module. Chacun de vos modules Prism devrait avoir une seule classe qui implémente IModule.

En supposant que vous avez fait ceci:

lecture du code, au-dessus, je vois une région en cours de création, mais vous n'avez pas ajouté le XAML pour le contrôle qui va être lié à cette région.

par exemple, je pense voir ce qui suit dans le Shell:

<UserControl> 
<Grid> 
<ItemsControl Margin="0,20,0,0" cal:RegionManager.RegionName="MainWindowRegion" /> 
</Grid> 
</UserControl> 

Cela créerait le MainWindowRegion et le lier à la ItemsControl sur la page. Lorsque ce contrôle utilisateur a été chargé, sa région serait enregistrée avec Prism et ajoutée à la valeur par défaut RegionManager. Si vous devez créer votre propre région manuellement, il n'est probablement pas lié à un contrôle. Ainsi, lorsque vous commencez à ajouter des vues à la région, elles ne seront pas affichées car la région n'est pas liée à un contrôle. .

En regardant les view/viewmodel résolutions, il est un moyen plus facile:

Avez SomeView prendre un paramètre SomeViewModel dans son constructeur, puis, se lient à DataContext là. L'unité verra que SomeView a une dépendance et la résoudra automatiquement ...