2009-08-11 5 views
25

TabControl의 항목을 ObservableCollection에 바인딩하는 가장 간단한 예제는 무엇입니까?TabControl의 항목을 wpf의 관찰 가능한 컬렉션에 바인딩하는 방법은 무엇입니까?

각 탭의 콘텐츠에는 고유 한 데이터가 있으며, 실제로이 데이터에는 observableCollections가 항목 구성 요소에 바인딩됩니다.

현재 사용자 정의 컨트롤이 있는데, 작성한 즉시 각 탭의 내용으로 설정하고 싶습니다. 또한 탭을 만들 때이 새 사용자 정의 컨트롤의 datacontext를 동적으로 설정해야합니다. 기본적으로 tabcontrol의 observablecollection에는 각 탭의 데이터에 매핑되는 모델 뷰가 포함됩니다.

WPF에서 MVVM을 위반하지 않고이 모든 작업을 수행해야합니다! 어떤 도움이 필요합니까?

많은 감사를드립니다!

답변

35

기본 예 :

<Window.Resources> 

    <DataTemplate x:Key="templateForTheContent" DataType="{x:Type vm:TheViewModelType}"> 
     <v:YourUserControl/> 
    </DataTemplate> 

    <DataTemplate x:Key="templateForTheHeader" DataType="{x:Type vm:TheViewModelType}"> 
     <TextBlock Text="{Binding ThePropertyToDisplayInTheHeader}"/> 
    </DataTemplate> 

</Window.Resources> 

... 

<TabControl ItemsSource="{Binding YourCollection}" 
      ContentTemplate="{StaticResource templateForTheContent}" 
      ItemTemplate="{StaticResource templateForTheHeader}"> 
</TabControl> 
+10

알다시피, WPF + MVVM은 가파른 학습 곡선을 가지고 있지만, 당신이 그것의 묘리를 터득하면 솔루션이 실제로 매우 우아하고 깨끗합니다. 도와 줘서 고마워. :) – bluebit

+0

WPF가 가파른 학습 곡선을 가지고 있다는 것에 동의하지만, MVVM 패턴에 대해 말하지는 않을 것입니다. 실제로 사용하기 시작하면 자연 스럽습니다. –

+1

데이터 템플릿 읽기 전용 컨트롤 만 포함하면이 방법이 효과적입니다. 그렇지 않으면주의해야합니다. TabControl은 탭 페이지를 변경할 때마다보기를 다시 만듭니다. 즉, 한 탭에서 다른 탭으로 전환 한 다음 다시 되돌릴 때 시각적 상태가 손실됩니다. –