WPF에서 뷰 전환(View Switching) 은 여러 방식이 있고, 상황(규모/복잡도/패턴 적용 여부)에 따라 선택하면 된다.

1. CollectionViewSource + CurrentItem 이동

  • 개념: CollectionViewSource / ICollectionView를 이용해서 CurrentItem을 바꿔가며 한 DataTemplate 안에서 아이템을 보여줌.
  • 장점:
    • 정렬/필터링/그룹핑/현재 항목 이동 같은 리스트 시나리오에서 강력.
    • MoveCurrentToNext(), MoveCurrentToPrevious() 같은 API 지원.
  • 단점:
    • 주로 컬렉션 기반 데이터 탐색에 적합 (Master-Detail UI).
    • “뷰 교체”라기보다는 “데이터 항목 전환”에 가깝다.

예시 동영상 (Programming WPF(이안그리피스 저) , P267 예제 7-4 참고)

 

 

 2. ContentControl + DataTemplateSelector (ViewLocator 패턴)

  • 개념: ContentControl.Content에 ViewModel을 바인딩하고, DataTemplateSelector나 리소스에 미리 등록된 DataTemplate으로 View를 선택.
  • 장점:
    • MVVM 순정: ViewModel 교체만 하면 View도 자동 전환.
    • 확장성 높음 (새 ViewModel 추가 시 DataTemplate만 추가하면 됨).
  • 단점:
    • 처음에는 설정이 번거로움.
    • 단순한 뷰 토글에는 다소 오버엔지니어링.

 3. Visibility 토글 (RadioButton, TabControl, etc.)

  • 개념: 뷰를 여러 개 동시에 배치해두고, Visibility=Visible/Collapsed로 보일 것만 표시.
  • 장점:
    • 구현 단순 (뷰 2~3개 정도라면 코드 몇 줄로 가능).
    • UI 전환이 빠름 (컨트롤이 이미 로드되어 있음).
  • 단점:
    • 메모리 낭비: 보이지 않아도 컨트롤은 살아 있음.
    • 뷰가 많아질수록 XAML이 지저분해짐.
    • 전환 로직이 ViewModel에 얽히면 유지보수 힘들어짐.

4. NavigationService / Frame (페이지 내비게이션)

  • 개념: Frame + Page 조합으로 뷰 전환.
  • 장점:
    • 브라우저처럼 "앞/뒤로 가기" 지원.
    • 페이지 단위로 관리 가능 (대규모 앱 적합).
  • 단점:
    • MVVM 순정과는 약간 동떨어짐 (Frame.Navigate는 Code-behind 호출).
    • NavigationService를 MVVM스럽게 감싸는 추가 작업 필요.

5. RegionManager (Prism, MVVM 프레임워크)

  • 개념: Prism 같은 프레임워크에서 RegionManager를 통해 영역별 View를 동적으로 로드.
  • 장점:
    • 대규모 앱에서 모듈화 쉬움.
    • Dependency Injection과 결합해 확장성 높음.
  • 단점:
    • 학습 곡선 있음.
    • 작은 프로젝트에는 오버킬.

 정리

  • 데이터 탐색 UI (리스트/상세 전환) → CollectionViewSource
  • MVVM 순정, ViewModel 기반 전환 → ContentControl + DataTemplateSelector (ViewLocator)
  • 간단한 UI 토글 → Visibility 바인딩
  • 페이지 단위 이동 → Frame + NavigationService
  • 대규모 앱, 모듈화 → Prism RegionManager

+ Recent posts