본문 바로가기

Dev::DotNet/Prism

Prism - 완전 단순한 Sample Source

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();

    }       

}





MyPrism.zip


'Dev::DotNet > Prism' 카테고리의 다른 글

Prism 의 Region 에 대한 생각  (0) 2015.03.11