2012-03-19 2 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> 

위의보기가 셸에 나타나야하지만 그렇지 않습니다. 쉘의 지역이 위의 견해를 나타내지 않는 이유는 무엇입니까?

편집 : 모듈은 아래 주어진대로 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

왜 region에 뷰를 추가하지 않고'RegionManager.RegisterViewWithRegion ("MainRegion", view)'를 호출하지 않습니까? 그것은 그것이 지역에만 추가하고 그것을 보여주지 않는 것 같습니다. –

+0

나는 당신의 제안을 시도했지만 여전히 빈 창이 나왔다. 보기는 어떻게 든 "MainRegion"에서 끝나지 않습니다. – Jatin

+0

그래야합니다. 코드에서 RegionManager.Regions [ "MainRegion"]을 호출하여이를 확인할 수 있습니다. 또는 로컬 윈도우에서 디버깅하여 사용할 수 있습니다. Else 당신이로드하고있는 ContentControl과 usercontrol에 너비와 높이를 설정해보십시오. –

답변

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 부분은 Window가 여전히로드 중이었습니다. App.xaml에서 "StartupUri"속성을 제거하지 못했기 때문입니다. 문제를 해결해 주셔서 감사합니다. – Jatin

+0

Phil, 답변을 제외했습니다. 지연 돼서 죄송합니다 – Jatin