C#/Prism

[C# - Prism] 프리즘 예제 03 - CustomRegions

반나무 2023. 7. 16. 17:19

안녕하세요, 반나무입니다.

이번 예제는 단순히 빌드만 해서는 결과가 보이지않아 프로젝트를 따로 만들어 확인했습니다.

StackPanel이나 Grid같은 다른 Control에서 Region을 사용가능하게 하는 예제입니다.

 

먼저 Prism에서 RegionAdapter는 4가지가 있습니다.

  • ContentControlRegionAdapter
  • SelectorRegionAdapter
  • ItemsControlRegionAdapter
  • TabControlRegionAdapter(Sliverlight만 해당)

예제에서는 StackPanelRegionAdapter를 새로 구현했으며,

해당 StackPanel에 Module를 Add하면 StackPanel디자인에 맞게 연결되어 들어갑니다.

// App.xaml.cs

protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings regionAdapterMappings)
{
    base.ConfigureRegionAdapterMappings(regionAdapterMappings);
    // StackPanel타입으로 RegionAdapter를 맵핑한다.
    regionAdapterMappings.RegisterMapping(typeof(StackPanel), Container.Resolve<StackPanelRegionAdapter>());
}

 

CreateRegion

CreateRegion에서는 해당 Region을 어떻게 생성할지에대한 방법을 선택하는것 같습니다.

이것저것 확인해봤는데도 잘 모르겠습니다. ㅠㅠ 아시는 분 댓글부탁드립니다.

참조한 블로그에서는 두가지 방법이 있다고 합니다.

  • AllActiveRegion : 모든 View에 대한 정보가 필요 할 때
  • SingleActiveRegion : View가 한 개 일 때

해당 예제는 StackPanel을 사용하기 때문에 모든 View에 대한 정보가 필요해 AllActiveRegion을 사용합니다.

// StackPanelRegionAdapter.cs

protected override IRegion CreateRegion() 
{
    return new AllActiveRegion();
}

 

작동 테스트

임의로 2개의 모듈을 만들어 해당 Region에 붙여보면 아래와 같은 결과가 나옵니다.

protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
    base.ConfigureModuleCatalog(moduleCatalog);

    moduleCatalog.AddModule<ModuleAModule>();
    moduleCatalog.AddModule<ModuleBModule>();
}

 

같은 모듈 붙이기

ModuleA를 여러번 Add하면 예외가 발생합니다.

아마 다른 방법이 있을것 같은데 아직은 잘 모르겠네요

 


참고 사이트

 

Create a Custom Prism RegionAdapter - Brian Lagunas

Don’t want to read the article?  Watch the video tutorial on Xaml TV. Prism provides 4 region adapters out of the box for you: ContentControlRegionAdapter SelectorRegionAdaptor ItemsControlRegionAdapter TabControlRegionAdapter (Silverlight only) Well, w

brianlagunas.com

 

반응형