2009-10-05 5 views
3

J'ai un projet WPF basé sur Prism février 2009 communiqué mis en place comme:WPF Prism - Pour utiliser les régions Scoped ou non?

Shell expose un ContentControl comme « MainRegion » Une autre vue (contrôle de l'utilisateur) défini dans le projet d'infrastructure appelé SPLITVIEW expose deux régions supplémentaires « LeftRegion "et" RightRegion "aussi comme ContentControl.

Certains des modules de ma demande doivent afficher leur vue dans MainRegion (un contrôle utilisateur), alors que d'autres doivent afficher leurs vues (deux contrôles utilisateur de manière séparée) dans LeftRegion et RightRegion.

J'ai essayé d'utiliser des régions délimitées, en supposant que des contrôleurs spécifiques contiendraient des références aux régions délimitées. Donc, fondamentalement, chaque contrôleur intéressé par la fonctionnalité SplitView doit instancier un nouveau SplitView (contrôle utilisateur) et l'activer dans MainRegion tout en activant ses deux contrôles utilisateur dans LeftRegion et RightRegion des régions scindées scindées. J'utilise MVVM avec View Injection pour afficher les vues.

Inutile de dire que quelque chose a horriblement mal tourné avec cette approche. Lors de l'exécution, j'obtiens cette exception, "Une exception s'est produite lors de la création d'une région avec le nom" LeftRegion ", à l'exception de: System.InvalidOperationException: l'élément spécifié est déjà l'enfant logique d'un autre élément. Ai-je raison de supposer que LeftRegion et RightRegion essaient de s'enregistrer avec le principal RegionManager chaque fois que j'instancie SplitView?

Désolé pour le message confus/verbose. Aucune suggestion? Les meilleures pratiques pour y parvenir?

Merci à l'avance,

Ali

+0

Je pense que vous allez devoir poster du code là-bas. J'ai relu votre message plusieurs fois et je ne suis pas à 100% sur ce que vous essayez de faire. –

+0

Anderson, fondamentalement ce que j'essaye de faire est d'instancier une vue (SplitView) plusieurs fois et cette vue définit ses propres régions (deux régions ContentControl, nommées "LeftRegion" et "RightRegion"). Je peux poster du code si c'est encore un peu flou. Merci. – Ali

Répondre

2

L'exception de « élément spécifié est déjà l'enfant logique ... » est ce qui se passe lorsque vous essayez d'ajouter quelque chose à deux endroits dans l'arbre, donc je Imaginez qu'il y ait une erreur logique dans votre code, ou vous ajoutez quelque chose deux fois.

Je crée généralement mes sous-régions comme ceci:

m_scopedRegionName = Guid.NewGuid().ToString(); /* EXAMPLE ! */ 
    m_scopedRegionManager = m_regionManager.Regions[RegionNames.WORKSPACE_REGION].Add(myViewModel.View, m_scopedRegionName, true); 
    m_someThingRegion = m_scopedRegionManager.Regions[RegionNames.SOME_THING_REGION]; 

Puis-je ajouter de nouvelles choses dans le « m_someThingRegion ».

+0

Jérémie, je fais quelque chose de similaire. C'est juste que dans mon cas, le "myViewModel.View" est instancié plusieurs fois. Est-ce l'erreur que je fais? Des insultations multiples sont-elles autorisées pour une vue qui définit ses propres régions? – Ali

+0

Bien sûr, vous pouvez avoir plusieurs instanciations pour une vue contenant des régions, mais dans ce cas, elles doivent être ajoutées à leur propre zone d'étendue. Assurez-vous que vous instanciez de nouvelles vues lorsque vous ajoutez à la région, sinon vous obtiendrez cette exception WPF. –

+0

C'était exactement l'erreur que je faisais.Je ne créais pas les instances de vue supplémentaires dans leur propre région. J'ai essentiellement ajouté la vue à mon MainRegion dans une région étendue. Merci pour la clarification, la solution fonctionne bien maintenant. – Ali

Questions connexes