winform 을 하다가 갑자기 wpf 를 하라고 해서
부랴부랴 한 5일 책을 읽고 엉겁결에 wpf 에 입문해서 닥치는 대로 우선 만들었는데...
그러다 보니...완전 개념 상실.
MVVM 이고 Prism 이고 뭐고 다 저 뒤편으로 팽개쳐놓고 있다가
이제 서야 Prism 을 조금씩 공부해보려 하니...
나이도 먹고..머리가 썩은지라...더군다나 혼자 하려니...너무 어려웠다.
우선 처음으로 간단하게 빈 메인 화면 띠우는 것 부터...하려고 하였으나...
Prism 샘플로 있는 소스는 너무 복잡해서...
이것저것 다 빼고 어찌어찌 해서 만든 완전 단순한 "Hello World" 수준의
그냥 화면만 뜨는 샘플 소스를 만들었다.
우선 Bootstrapper 를 상속받아 기본적으로 Application 실행에 필요한 MainWindow 를 보여주기 위한
CreateShell 과 InitializeShell 을 재정의 한다.
public class MyBootstrapper :
Microsoft.Practices.Prism.UnityExtensions.UnityBootstrapper
{
protected override System.Windows.DependencyObject CreateShell()
{
return Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<Shell>();
}
protected override void InitializeShell()
{
base.InitializeShell();
System.Windows.Application.Current.MainWindow = (Shell)this.Shell;
System.Windows.Application.Current.MainWindow.Show();
}
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
Microsoft.Practices.Prism.Modularity.ModuleCatalog moduleCatalog =
(Microsoft.Practices.Prism.Modularity.ModuleCatalog)this.ModuleCatalog;
moduleCatalog.AddModule(typeof(MyPrismModule.MyPrismModule));
}
}
ModuleCatalog 를 정의하기 위한 Region 과 화면을 연결해서
Bootstrapper 의 ConfigureModuleCatalog 에서 정의 내용을 가져온다.
public class MyPrismModule : Microsoft.Practices.Prism.Modularity.IModule
{
private readonly Microsoft.Practices.Prism.Regions.IRegionViewRegistry regionViewRegistry = null;
public MyPrismModule(Microsoft.Practices.Prism.Regions.IRegionViewRegistry registry)
{
this.regionViewRegistry = registry;
}
public void Initialize()
{
regionViewRegistry.RegisterViewWithRegion("InforPanelRegion", typeof(MyInforPanel));
regionViewRegistry.RegisterViewWithRegion("MainPanelRegion", typeof(MyMainPanel));
}
}
그리고 MainWindow 에서 보여줄 위치에 Region 을 넣어준다.
<Window x:Class="MyPrism.Shell"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.codeplex.com/CompositeWPF"
xmlns:MyPrism="clr-namespace:MyPrism"
Title="Shell" Height="300" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto "/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<ContentControl Grid.Row="0" cal:RegionManager.RegionName="InforPanelRegion" />
<ContentControl Grid.Row="1" cal:RegionManager.RegionName="MainPanelRegion" />
</Grid>
</Window>
이렇게 구성된 Bootstrapper 를 Application 에서 생성하여 실행시켜주면 된다.
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
MyBootstrapper bootstrapper = new MyBootstrapper();
bootstrapper.Run();
}
}
'Dev::DotNet > Prism' 카테고리의 다른 글
Prism 의 Region 에 대한 생각 (0) | 2015.03.11 |
---|