Custom Region Adapter : Create a Custom Region adapter for the StackPanel

여기서는 바로 이전 챕터에서 확인했었던 Region이라는 개념에 대한 확장판이다. 단순히 특정 View에 RegionName을 설정할 수 있다 라는 개념을 이전 챕터에서 확인했다면, 여기서는 Region이라는 개념을 이용하여 View를 초기화 하고 Region설정을 하는 등의 동작을 구분하여 구현할 수 있는 Adapter라는 개념을 통해 View Control를 할 수 있게 도와주는 동작이 가능하게 되어 있다. 당연히 이런 부분은 Prism에서 주요 설계패턴으로 가지고 가는 MVVM 패턴에서 따로 디자인되어 구현되어 갈 수 있는 부분이기도 하다.

이 부분 부터는 코드를 확인하면서 가야하는 부분이기도 하다.

Application 초기화 부분인 App.cs에서 이번에도 PrismApplication을 상속하여 실행하고 있고, 동일하게
CreateShell(), RegisterTypes(..), 추가로 ConfigureRegionAdapterMappings(...)를 오버라이딩하여 구현해놓았다.

CreateShell(), RegisterTypes(..)는 이전과 동일하고 큰 내용은 없으나 이번에 주요하게 봐야하는 부분은 ConfigureRegionAdapterMappings(...) 이 함수인데, CreateShell()이전에 호출되어 View단이 초기화 되어 실행하기 전에 호출된다. 그리고 이 챕터의 메인이 되는 Region들의 Adapter들을 Mapping한 객체들을 등록하는곳이다.

base함수를 호출 후(내부 초기화 인듯) RegisterMapping함수를 통해 한 객체를 등록하는데,

App.cs

바로 StackPanelRegionAdapter라는 RegionAdpaterBase<T>를 동록한다. T는 UI Element. 여기서는 StackPanel.
여기서는 RegionAdapterBase<T>라는 클래스가 중점인데, 해당 클래스는 IRegionAdapter<T>이며 이는 Prism Lib이다. 

여기서 추측해보자면 IRegionAdpater<T> -> RegionAdapterBase<T>는 Region의 Adapter역할을 하는 클래스라는것을 이름을 통해 확인할 수 있으며 다음의 코드를 통해 더욱더 자세한 역할을 볼수 있다.

StackPanelRegionAdapter : RegionAdaterBase<StackPanel>

해당 Adapter는 Shell이 만들어 지고 UI가 출력될때 동작한다. (당연히 동적으로 생성되는건 위 코드에서 등록되는 타임)

여기서는 Adapter에서 IRegion -> Region -> AllActiveRegion 객체를 리턴하며 위 Adapt(...) 에서 View들을 Control 하기 위한 구현부들이 존재한다.

여기서 디버깅타임을 통해 확인할 수 있는것은, Adapt의 파라미터중 IRegion으로 넘어오는 객체가 아래에서 생성했던 AllActiveRegion 객체이며 이 객체의 Name이 MainWindow의 ContentControl의 RegionName으로 설정한 ContentRegion이다. 

MainWindow에서 RegionManager로 설정한 UI Element의 RegionName이 ContentRegion이며 이 UI Element는 StackPanel 이었다. StackPanelRegionAdapter는 T로 Stack을 설정했었고 자동적으로 Prism Lib에서 MainWindow에 설정된 StackPanel을 Adapt할 수 있는 객체로 StackPanelRegionAdapter를 Prism Container에서 자동적으로 설정할 수 있게 도와주는 것이다. 

예로, MainWindow에 Grid를 따로 선언한 부분이 있다면,

MainWindow.xaml

저 GridRegion이라는 부분도 따로 GridRegionAdapter<Grid> Class 를 구현하여 App.cs에서 RegisterMapping에 등록한 후 추후 호출되는 GridRegionAdapter의 Adapt(...)에서 저 'GridRegion'과 Grid 객체가 같이 파라미터로 넘어오는것을 확인 할 수도 있다.

위 Adapt(...) 함수에서는 파라미터로 넘어오는 객체에 Region설정을 할 수도, T로 설정된 StackPanel의 객체에 직접 UI 컨트롤을 할 수도 있게 되었다. 너무 직접적인 UI Control은 Adapter라는 개념에 맞지는 않지만 직접 컨트롤 할 수도 있으므로 어떻게든 View단을 활용하면 될것이다.


이번 챕터의 의미는

  • 이전 챕터에서 배운 Region이라는 개념.
  • RegionName이 설정된 View는 RegionAdapterBase<T>로 Adapter화 하여 사용할 수 있게 도와준다.
  • RegionAdapterBase<T>은 Region을 적극적으로 활용할 수 있게 해주는 Adapter로서
    Region Control 설정과 UI Element를 직접 컨트롤 할 수 있게 해준다.

끝.

'개발 > Prism' 카테고리의 다른 글

[Prism][WPFSample] Regions  (0) 2021.07.19
[Prism][WPFSample] BootstrapperShell  (0) 2021.07.19
[Prism] WPF Sample  (0) 2021.07.19

Regions : Create a region

이번 샘플은 Prism에서 UI Control을 위한 라이브러리를 지원한다는것을 보여주기 위함인데 sample이 너무 simple하다. 하다못해, 버튼하나 누르면 구현부로 인해 UI가 변경되는것을 보여주는 형식이라도 되야하는데, 그냥 초기에 설정하고 바뀌는것은 하나도 없다. 이로 인해 여기서 Regions라는 기능을 확실하게 확인하기는 어렵지만 설정하는 부분에 대한 개념은 이해할 수 있으므로 코드를 보도록 하자.

우선, Regions 라는 기능을 이해하기 이전에, 이전 챕터에서 보여줬던 Bootstrapper라는 구현부가 바로 등장하게 된다. 이전 챕터에서는 PrismBootStrapper를 상속한 Bootstrapper를 App.xaml에서 Onstatup을 오버라이딩한 곳에서 동적으로 생성하여 시작하였다.

그러나 이 Bootstrapper는 계속 상속관계를 확인하면

Application -> PrismApplicationBase -> PrismApplication -> BootStrapper

이므로 여기서는 App.cs가 PrismApplication을 상속하여 구현되어 있으므로 Base Class가 Application이므로 프로그램의 초기화에 아무런 문제가 없다.

또한, 이전챕터에서 확인할 수 있었던 Prism Container의 각 설정부분을 App.cs에서 바로 구현할 수 있다. 그래서 이 샘플은 Regions의 기능을 확인 할 수 있는 부분보다는 시작부의 Bootstrapper의 대한 구현부를 제대로 구현해서 이를 활용할 수있다는 것을 보여준다. 물른 상세한 설정은 샘플을 계속 확인하면 계속 나오니 이전 챕터들에 대한 개념을 확실히 알고 있어야 한다는것을 의미하고 있기도 하다.

그래서 시작(초기화)부분인 Bootstrapper은 이정도로 확인하고(계속 되는 샘플에서 계속 확인이 가능하다), Regions을 보자면,

MainWindow에서 특별한 코드를 확인할 수 있는데 이 부분이 Region을 설정한 부분이다.

Window의 클래스에 Grid UI Element가 있는데 Child로 ContentControl의 DependencyObject의 객체로 RegionManager클래스의 RegionName을 설정한것을 확인할 수 있다. (prism이 선언되어 있어야한다. xmlns:prism 선언부 확인)

즉, RegionManager이라는 DependecyObject를 이용하여 UI Element의 속성을 선언할 수있는데, 이중 Prism에서 제공하는 RegionManager가 있고 이 객체의 RegionName에 View의 Name을 설정하여, 추후 Prism Container가 동작하는 다른 구현부에서도 이 RegionName을 호출하여 View를 Control 할 수 있다.


이 챕터의 의미는 

  • View를 Region이라는 속성으로 관리할 수 있다.
  • RegionName을 설정할 수 있으므로 이름 관리가 가능하다.

여기서는 "View단에 특정 이름을 설정할 수 있다"라는 것까지만 보여주고 있다. 이후의 챕터에서 이를 이용한 UI 변경 및 Control을 보여주므로 Region이라는 개념이 있다라는 것을 기억하고 넘어가야한다.


끝.

'개발 > Prism' 카테고리의 다른 글

[Prism][WPFSample] Custom Regions  (0) 2021.07.19
[Prism][WPFSample] BootstrapperShell  (0) 2021.07.19
[Prism] WPF Sample  (0) 2021.07.19

Bootstrapper and the Shell : Create a basic bootstrapper and shell

App.xaml에 OnStartup을 오버라이딩해서 내부에 BootStrapper를 생성하여 실행한다.

해당 BootStrapper는 Prism이 제공한 PrismBootstrapper를 상속한 클래스를 호출한 것이었는데, 상속한 클래스는 아래와 같다.

즉, 각 함수들을 오버라이딩해서 필요한 부분을 확장해서 사용하라는 방식인것 같다.

 - CreateShell()은 Shell이라고 하는 각 동작단위를 생성하는 부분 같은데, 지금은 간단히 MainWindow를 등록하는것 같다.  Resolve에 MainWindow의 타입을 등록하면 아마도 초기에 해당 메인의 UI가 동작해야하는부분이 저 등록된 부분에 의해 시작되지 않을까 한다.

- RegisterTypes(...) 부분은 추후에 IContainerRegistry를 통해 PrismContainer에 등록해서 추후 컨테이너에 의해 다시 호출되어 사용될 수 있다. 이렇게 등록하고 추후 호출되어 사용되는 부분에 대한 샘플이 따로 있으니 거기서 확인하자.

 

이번은 첫 샘플이기 때문에 아마도 복잡한 내용은 없는듯 하다.

bootstrapper를 이용한 프리즘 초기화 방식과 이렇게 hello world 나오는 Window 창 띄울 수 있다. 이정도 인것 같다.


이번 쳅터의 의미는

  • Prism을 시작하는 PrismBootstrapper라는 개념
  • PrismBootStrapper에서 시작

으로 볼 수 있을것 같다.


끝.

'개발 > Prism' 카테고리의 다른 글

[Prism][WPFSample] Custom Regions  (0) 2021.07.19
[Prism][WPFSample] Regions  (0) 2021.07.19
[Prism] WPF Sample  (0) 2021.07.19

2021-07-18 기준 Prism WPF Sample을 기준으로 하나씩 분석해 보려 한다.

기본적인 사용법 이후에 Prism을 잘 사용하기 위한 방법을 확인해보려 한다.

문제는 Prism 라이브러리에 플러그인 중 

이런것이 있는데....(NOTE 참고), 플러그인 이라서 큰 문제는 안되나, 이렇게 가는게 맞는지는 모르겠다...

일단 메인을 기준으로 확인해보려 한다.

개념에 대한 설명은 사실 너무 옛날 버전들을 기준으로 Documents가 있어 그것을 보고 설명하기에는 너무 다른 내용들인것 같고, 일단은 WPF Sample 로 나온 코드를 기준으로 각 챕터별로 구분하여 확인하고자 한다. 

챕터가 무려 29번까지 있어 내용은 길어보일 수 있지만, 중복되는 내용 및 이전에 했던 챕터의 내용을 알고있다는 가정하에 다음챕터에서 활용하는 경우가 굉장히 많으므로 이를 숙지하고 넘어가야 한다.

sample URL은 https://github.com/PrismLibrary/Prism-Samples-Wpf 이며 WPF를 기준으로 설명하겠다.

끝.

'개발 > Prism' 카테고리의 다른 글

[Prism][WPFSample] Custom Regions  (0) 2021.07.19
[Prism][WPFSample] Regions  (0) 2021.07.19
[Prism][WPFSample] BootstrapperShell  (0) 2021.07.19

+ Recent posts