2

実行時にモジュールを動的にロードする MV-VM アプリケーションを構築しています。

これらの各モジュールにはデフォルトのビューがあり、移動すると選択したリージョンに個別に表示されます

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

ただし、次のモジュールがロードされると、以前にロードされたビューが上書きされます。デフォルト ビューを表示する「メニュー」を作成するために、複数のビューをリージョンにロードするにはどうすればよいですか? 例えば

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

のように見える

Module1View Module2View Module3View Module4View など

よろしくお願いします。

4

2 に答える 2

2

StackPanelRegion Adapter を作成し、次の XAML を使用することで、これを行うことができました

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

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

Region Adapter Code 同じ状況の方はこちら

 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();
        }
    }
于 2010-02-25T08:37:54.893 に答える
0

私があなたを理解しているなら、リージョンにロードしようとしていますが、オブジェクトをそのリージョンにロードすると、オブジェクトは互いに上書きされますか?

1 つのリージョンに複数のビューをロードすることはできません。他のビューを表示するメニューを表示したい場合は、2 つの領域を作成し、独自のメニューを作成する必要があります。メニュー表示コードを ModuleInit に入れ、他のビューを別の「MainRegion」にロードするメニュー項目のクリック イベントにコードを追加します。

于 2010-02-24T14:46:10.030 に答える