2016-05-19 21 views
0

のためのビューを登録する方法:次のように私は、プロジェクトの構造を持っているナビゲーション

Modules 
    --- ModuleA 
     ---ViewA 
     ---ViewModelA 
     ---Module 
    --- ModuleB 
     ---ViewB 
     ---ViewModelB 
     ---Module 
MyApplication 
    ---Shell.xaml 
    ---Bootstrapper 
MyApplication.Infrastructure 
    --- 
    --- 

を今、ModuleA.Moduleで:

[ModuleExport(typeof(Module), InitializationMode = InitializationMode.WhenAvailable)] 
[PartCreationPolicy(CreationPolicy.NonShared)] 
public class Module : IModule 
{ 
    IRegionManager _regionManager; 

    [ImportingConstructor] 
    public Module(IRegionManager regionManager) 
    { 
     _regionManager = regionManager; 
    } 

    public void Initialize() 
    { 
     _regionManager.RegisterViewWithRegion(RegionNames.ContentRegion, typeof(ViewA)); 
    } 
} 

を今、ModuleB.Moduleで:

[ModuleExport(typeof(Module), InitializationMode = InitializationMode.WhenAvailable)] 
[PartCreationPolicy(CreationPolicy.NonShared)] 
public class Module : IModule 
{ 
    IRegionManager _regionManager; 

    [ImportingConstructor] 
    public Module(IRegionManager regionManager) 
    { 
     _regionManager = regionManager; 
    } 

    public void Initialize() 
    { 
     _regionManager.RegisterViewWithRegion(RegionNames.ContentRegion, typeof(ViewB)); 
    } 
} 

In Shell.xaml:

<DockPanel LastChildFill="True"> 

    <Menu DockPanel.Dock="Top"> 
     <MenuItem Header="Show View A" /> 
     <MenuItem Header="Show View B" /> 
    </Menu> 
    <ContentControl prism:RegionManager.RegionName="{x:Static inf:RegionNames.ContentRegion}"/> 

</DockPanel> 
Bootstrapper.cs

protected override void ConfigureAggregateCatalog() 
{ 
    base.ConfigureAggregateCatalog(); 
    AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(BootStrapper).Assembly)); 
    AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(RegionNames).Assembly)); 
    AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(ModuleA.Module).Assembly)); 
    AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(ModuleB.Module).Assembly)); 
} 

私はアプリケーションを実行すると、私は輸出または複数の輸出がContentRegion見つかりませんでしたことを指定するエラーを取得します。私は同じ地域に両方の意見を登録していることを理解できます。そのエラーが発生します。

しかし、ナビゲーション目的でビューを登録する方法がわからないので、MenuItem Show View Aをクリックすると、ViewAがコンテンツ領域に表示されます。 ViewBも同様です。

+0

これは役立つかもしれない:http://stackoverflow.com/questions/35476745/how-to-register-modules-in-prism-6-wpf-application-with-view-switching-navigatio –

+0

@RリチャードはUnityを使用しています。私はMefを使いたい。 – Vishal

+0

申し訳ありません。これについてはどうすればいいですか:http://stackoverflow.com/questions/33301926/wpf-prism-request-navigate-activation-error/33303082#33303082 –

答えて

2

文書を読もうとしましたか? MEFを使用して

https://github.com/PrismLibrary/Prism/blob/master/Documentation/WPF/60-Navigation.md#prism-region-overview

、あなたは単に指定された名前のビュータイプをエクスポートすることができます。

[Export("InboxView")] 
public partial class InboxView : UserControl 
+0

はい、私はそれをすることができます。しかし、どのように特定のmenuItemでこのビューをアタッチするのですか?それは統一かどんな違いと同じですか? – Vishal

+0

また、例ではどこでもthis.containerを使用しています。そのコンテナのタイプは何ですか? – Vishal

+0

また、両方のモジュールをBootstrapperに登録すると、エラーが発生します。しかし、もし私がそれらのいずれかを登録すれば、エラーはありません。だから、どうやって登録すればいいですか?手伝ってくれてありがとう。 – Vishal

関連する問題