2011-04-04 4 views
4

Comment décharger une vue d'une région Prism? Je suis en train d'écrire une application WPF Prism avec un contrôle de ruban dans l'environnement Shell. L'onglet Accueil du ruban contient une région, RibbonHomeTabRegion, dans laquelle un de mes modules (appelez-le ModuleA) charge un RibbonGroup. Cela fonctionne bien. Lorsque l'utilisateur quitte le ModuleA, le RibbonGroup doit être déchargé du RibbonHomeTabRegion.Je ne remplace pas le RibbonGroup avec une autre vue - la région devrait être vide.Prism 4: Décharger la vue de la région?

EDIT: J'ai réécrite cette partie de la question:

Lorsque je tente de supprimer la vue, je reçois un message d'erreur « La région ne contient pas la vue spécifiée. » Alors, je l'ai écrit le code suivant pour supprimer tout ce qui est vue dans la région:

// Get the regions views 
var regionManager = ServiceLocator.Current.GetInstance<IRegionManager>(); 
var ribbonHomeTabRegion = regionManager.Regions["RibbonHomeTabRegion"]; 
var views = ribbonHomeTabRegion.Views; 

// Unload the views 
foreach (var view in views) 
{ 
    ribbonHomeTabRegion.Remove(view); 
} 

Je reçois toujours la même erreur, ce qui me dit qu'il ya quelque chose assez basique que je fais mal.

Quelqu'un peut-il me diriger dans la bonne direction? Merci de votre aide.

Répondre

4

J'ai trouvé ma réponse, même si je ne peux pas dire que je la comprends parfaitement. Je l'avais utilisé IRegionManager.RequestNavigate() pour injecter le RibbonGroup dans l'onglet Accueil du ruban, comme ceci:

// Load RibbonGroup into Navigator pane 
var noteListNavigator = new Uri("NoteListRibbonGroup", UriKind.Relative); 
regionManager.RequestNavigate("RibbonHomeTabRegion", noteListNavigator); 

J'ai changé le code pour injecter la vue en vous inscrivant avec la région, comme celui-ci:

// Load Ribbon Group into Home tab 
regionManager.RegisterViewWithRegion("RibbonHomeTabRegion", typeof(NoteListRibbonGroup)); 

maintenant, je peux retirer le RibbonGroup en utilisant ce code:

if(ribbonHomeTabRegion.Views.Contains(this)) 
{ 
    ribbonHomeTabRegion.Remove(this); 
} 

Alors, comment vous injectez le point de vue des questions apparemment. Si vous souhaitez pouvoir supprimer la vue, injectez-la en vous inscrivant auprès du gestionnaire de région

0

Est-il possible que vous ayez un RegionAdapter qui encapsule la vue dans une autre vue avant de l'ajouter? Le ribbonHomeTabRegion devrait avoir une propriété avec la collection de vues - y a-t-il quelque chose à l'intérieur?

+0

Cette réponse a été publiée avant mon édition. –

0

Exemple de projet StockTraderRI par Microsoft contient l'exemple suivant de suppression de vues de la région dans ViewModel.

private void RemoveOrdersView() 
{ 
    IRegion region = this._regionManager.Regions[RegionNames.ActionRegion]; 

    object ordersView = region.GetView("OrdersView"); 
    if (ordersView != null) 
    { 
     region.Remove(ordersView); 
    } 
} 
Questions connexes