2012-03-19 12 views
0

私はプリズムを学ぼうとしていましたが、私は非常に基本的な例を得ることができません。私は単一の領域を持つシェルを持っています。私はモジュールからシェルの領域にビューをロードしようとしていますが、シェルは空のウィンドウを表示しています。私は、ビューがシェルの領域に読み込まれない理由を理解できません。ここにコードファイルがあります。プリズム - シェル内にusercontrolの内容をロードしていない

ブートストラップ:

public class Bootstrapper : MefBootstrapper { 

    protected override DependencyObject CreateShell() { 
     Window shell = new MainWindow(); 
     Application.Current.MainWindow = shell; 
     return shell; 
    } 

    protected override IModuleCatalog CreateModuleCatalog() { 
     return new ConfigurationModuleCatalog(); 
    } 
} 

シェル:

<Window x:Class="MVVMPractice.MainWindow"> 
    <StackPanel x:Name="LayoutRoot" Background="White"> 
     <ContentControl prism:RegionManager.RegionName="MainRegion" /> 
    </StackPanel> 
</Window> 

モジュール:地域に負荷に

[ModuleExport(typeof(CoreModule))] 
public class CoreModule : IModule { 

    [Import] 
    public IRegionManager RegionManager { get; set; } 

    public void Initialize() { 
     var view = new WelcomeView(); 
     RegionManager.AddToRegion("MainRegion", view); 
    } 
} 

ビュー:

<UserControl x:Class="MVVMPractice.Modules.Core.WelcomeView"> 

<Grid Background="Red"> 
    <TextBlock Text="Hello Prism!" FontSize="20" /> 
</Grid> 
</UserControl> 

上記のビューはシェルに表示されますが、表示されません。シェルの地域が上記の見解を示さない理由は何ですか?

EDIT: モジュールは、次のようにApp.configファイルで構成されます。

App.configを

<configuration> 
    <configSections> 
    <section name="modules" type="Microsoft.Practices.Prism.Modularity.ModulesConfigurationSection, 
            Microsoft.Practices.Prism"/> 
    </configSections> 
    <modules> 
    <module assemblyFile="MVVMPractice.Modules.Core.dll" 
      moduleType="MVVMPractice.Modules.Core.CoreModule, MVVMPractice.Modules.Core.CoreModule, 
         Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 
      moduleName="CoreModule" 
      startupLoaded="true" /> 
    </modules> 
</configuration> 
+0

リージョンにビューを追加するのではなく、 'RegionManager.RegisterViewWithRegion(" MainRegion "、view)'を呼び出さないのはなぜですか。それはそれを地域に加えて表示していないように思えます。 –

+0

私はあなたの提案を試みましたが、まだ空白のウィンドウが表示されます。ビューはどうにかして "MainRegion"に終わらない。 – Jatin

+0

それはうまくいくはずです。これをチェックするには、コード内のRegionManager.Regions ["MainRegion"]を呼び出すか、デバッグしてlocalwindowで使用します。 ElseあなたがロードしているContentControlとユーザコントロールの両方に幅と高さを設定してみてください。 –

答えて

1

私はまだApp.configファイル構成を使用しようとしていないが、これは、私の作品:

public class Bootstrapper : MefBootstrapper 
{ 
    #region Overrides of Bootstrapper 

    protected override DependencyObject CreateShell() 
    { 
     return Container.GetExportedValue<MainWindow>(); 
    } 

    protected override void InitializeShell() 
    { 
     base.InitializeShell(); 

     Application.Current.MainWindow = (MainWindow) Shell; 
     Application.Current.MainWindow.Show(); 
    } 

    protected override IModuleCatalog CreateModuleCatalog() 
    { 
     return new ConfigurationModuleCatalog(); 
    } 

    protected override void ConfigureAggregateCatalog() 
    { 
     base.ConfigureAggregateCatalog(); 

     AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof (Bootstrapper).Assembly)); 
     AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(CoreModule).Assembly)); 
    } 

    #endregion 
} 

//コアはあなた

と同じモジュール

//メインウィンドウ(シェル)

<ContentControl prism:RegionManager.RegionName="MainRegion" /> 

Xamlは動作しますが、StackPanelを使用しているため、領域は表示されません。

+0

Phil、構成ファイルを使用してモジュールをどのように構成しているかを示す質問を編集しました。私はモジュールが発見されるべきであると思います。また、私のモジュールのInitialize()メソッドが呼び出されていることがわかります。唯一のことは、リージョンには追加しようとしているビューが表示されないということです。質問を見ていただきありがとうございます。 – Jatin

+0

Phil、コードを試して、ここに投稿してくれてありがとう。あなたのコードから、BootstrapperにInitializeShell()がないことがわかりました。 intersting部分は、ウィンドウがまだ読み込まれていた。これは、私のApp.xamlで "StartupUri"属性を削除できなかったためです。問題を解決するために感謝します。 – Jatin

+0

フィル、私は答えを除いた。遅れて申し訳ありません – Jatin

関連する問題