2010-02-24 2 views
1

Je crée une application M-V-VM avec le chargement dynamique des modules lors de l'exécution.Charger les vues par défaut du module dans la région pour créer le menu

Chacun de ces modules a une vue par défaut qui individulally qu'ils montrent sur la région sélectionnée quand je vais

_regionManager.Regions["BottomMenuRegion"].Add(
    Container.Resolve<AdminModuleView>(), "AdminView", true); 

Cependant, lorsque les charges module suivant, il overwrtites la vue chargée précédente .. Comment puis-je charger plus qu'une vue dans une région afin qu'elle crée un "Menu" affichant la vue par défaut? par exemple

<ItemsControl cal:RegionManger.RegionName="BottomMenuRegion" /> 

ressemble

Module1View Module2View Module3View Module4View etc

vous remerciant à l'avance.

Répondre

1

J'ai réussi à faire ceci en créant un adaptateur de StackPanelRegion et en utilisant le suivant XAML

<StackPanel Orientation="Horizontal" 
      cal:RegionManager.RegionName="BottomMenuRegion" > 

      <ItemsControl> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <Grid/> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
      </ItemsControl> 
     </StackPanel > 

code adaptateur région ici pour ceux dans la même situation

public class StackPanelRegionAdapter : RegionAdapterBase<StackPanel> 
    { 
     public StackPanelRegionAdapter(IRegionBehaviorFactory behaviorFactory) : 
      base(behaviorFactory) 
     { 
     } 
     protected override void Adapt(Microsoft.Practices.Composite.Regions.IRegion region, StackPanel regionTarget) 
     { 
      region.Views.CollectionChanged += (s, e) => 
      { 
       if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) 
        foreach (FrameworkElement element in e.NewItems) 
         regionTarget.Children.Add(element); 
       //Handle remove event as well.. 
      }; 
     } 

     protected override Microsoft.Practices.Composite.Regions.IRegion CreateRegion() 
     { 
      return new AllActiveRegion(); 
     } 
    } 
0

Si je vous comprends bien, vous essayez de charger dans une région, mais lorsque vous chargez des objets dans cette région, ils sont en train de s'écraser l'un l'autre.

Vous ne pouvez pas charger plus d'une vue dans une région. Si vous souhaitez afficher un menu qui affichera d'autres vues, vous devrez créer deux régions et créer votre propre menu. Placez le menu montrant le code dans le ModuleInit et ajoutez un peu de code aux événements de clic des éléments de menu qui chargeront d'autres vues dans un différent "MainRegion"

Questions connexes