2012-02-02 6 views
0

ContentPresenter을 포함하는 DataTemplate으로 정의되는 TabControl입니다. 매핑 UIElement 클래스는 특정 ViewModel 유형에 대해 DataTemplate으로 정의됩니다. 그것은 다음과 같이 작동합니다 :TabControl에서 ContentTemplate의 인스턴스화 된 UIElement 가져 오기

<UserControl.Resources> 
     <DataTemplate DataType="{x:Type ViewModels:DiagramVM}"> 
      <Controls:Diagram DataContext="{Binding}" x:Name="diagram"/> 
     </DataTemplate> 
</UserControl.Resources> 

<TabControl ItemsSource="{Binding Path=Tabs, Mode=TwoWay}" SelectedIndex="{Binding Path=SelectedTabIndex}" 
          x:Name="AnalysisTabCtrl" Template="{DynamicResource ScrollableTabControlTemplate}"> 
    <TabControl.ItemTemplate> 
        <DataTemplate> 
         <Label Content="{Binding Path=Header}"/> 
        </DataTemplate> 
    </TabControl.ItemTemplate> 
    <TabControl.ContentTemplate> 
        <DataTemplate> 
         <ContentPresenter Content="{Binding Path=ViewModel}"/> 
        </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 

제 문제는 인스턴스화 된 UIElements의 인스턴스가 필요하다는 것입니다. 이 경우 다이어그램 인스턴스입니다. 어떻게 얻을 수 있습니까?

답변

1

당신은 당신의 TabControl 밖으로 TabItem를 얻기 위해 ItemsControl.ItemContainerGenerator을 사용할 수 있습니다, 당신은 이름을 인스턴스화 컨트롤을 검색 할 TabItem.ContentTemplateFindName를 사용할 수 있습니다. 여기에서 콘텐츠 발표자의 이름을 지정한 다음 다시 검색해야합니다 (ContentTemplate).

이렇게하지 않는 것이 좋습니다.이 설정 없이는 관리 할 수 ​​없다면 관련 속성을 모두 바인딩하지 않았을 것입니다. 항목.

관련 문제