2010-02-24 92 views
1

我在運行時用動態加載模塊構建M-V-VM應用程序。加載模塊默認視圖在區域創建菜單

每個模塊都具有individulally他們表現出的,當我去

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

然而,當一個模塊加載它overwrtites以前加載視圖中選擇的區域,默認視圖。我怎麼能裝載更多而不是一個視圖到一個區域,以便它創建一個顯示默認視圖的「菜單」? e.g

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

看起來像

Module1View Module2View Module3View Module4View等

請多關照。

回答

1

我設法通過創建一個StackPanelRegion適配器和使用下面的XAML

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

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

區域適配器代碼這裏爲那些在相同的情況下

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

如果我正確地理解你,你正試圖加載到一個區域,但是當你將對象加載到該區域時,它們會互相覆蓋?

您無法將多個視圖加載到一個區域中。如果您想顯示一個可顯示其他視圖的菜單,則必須製作兩個區域並製作自己的菜單。將菜單顯示代碼放入ModuleInit,然後將一些代碼添加到菜單項的點擊事件中,將其他視圖加載到不同的「MainRegion」