Compass에서 Add Data를 하면 나오는 창에서 기본적으로 objectID만 설정된 상태일텐데 여기서,

가장 기본적인 대화창

Collection의 TimeField를 "ts"로 정했다면 아래와 같이 ts 값을 넣어주면 된다.

그렇게 데이터가 입력되면 아래와 같이 기록이 된다

documents의 화면

이렇게 데이터를 넣으면 된다

VS2019에서 .NET5 프로젝트들을 생성하면 빌드시
Bin\Debug\net5.0 이나 net5.0-windows 같은 폴더 이하에 빌드파일들이 생성되는것을 확인할 수 있는데,

이렇게 되면 여러 프로젝트들을 묶은 솔루션 같은 경우 전체 프로젝트들을 빌드시 빌드파일들의 경로가 중구난방이 된다.

기존의 4.8이하의 버전에서는 프로젝트 속성에서 설정한 출력경로 거기에 바로 파일들이 떨어졌었는데 이번에는 .Net5의 특성으로 인해 각종 설정이 붙다보니 뒤에 계속 접미사가 붙는것 같다.

 

솔루션의 해당 프로젝트마다 프로젝트 편집기를 통해 xml파일을 편집하는 화면으로 넘어가서 

맨 아래쪽 네 라인을 추가하면 된다

<PropertyGroup>
   <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
   <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>

위 코드를 추가하면 프로젝트 속성에서 설정한 출력경로로 바로 어셈블리들이 떨어지게 된다.

각 프로젝트마다 설정해 줘야 한다.

 

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