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

+ Recent posts