从TabControl获取实例化的ContentTemplate UIElement

时间:2012-02-02 12:47:03

标签: wpf mvvm datatemplate tabcontrol contentpresenter

我有一个TabControl,其中ContentTemplateDataTemplate定义,其中包含ContentPresenter。映射UIElement类由特定ViewModel类型的DataTemplate定义。它的工作原理如下:

<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的实例。在这种情况下, Diagram 实例。我怎么能得到它们?

1 个答案:

答案 0 :(得分:1)

您可以使用ItemsControl.ItemContainerGeneratorTabItem中获取TabControl,然后您可以使用FindName上的TabItem.ContentTemplate来搜索已命名的实例化控制。 (在这里你可能需要命名内容演示者,然后再次搜索其ContentTemplate

我不建议做这样的事情,如果没有这个你就无法管理,你可能没有将所有相关属性绑定到你的项目。