Найти элемент в DataTemplate, примененный к TabItem

У меня возникла проблема при попытке найти элемент, объявленный в DataTemplate, который после был применен как ContentTemplate к объекту TabItem. Я видел, что уже есть некоторые решения в отношении этой проблемы, но никто из них на самом деле не работает в моем случае, и я хотел бы понять, почему (очевидно, я делаю ошибку в каком-то месте) Вот пример кода:

<DataTemplate x:Key="TabItemDataTemplate">             
    <Grid HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" Name="templateGrid">
        <Grid.RowDefinitions>
            <RowDefinition Height="6.0*"> </RowDefinition>
            <RowDefinition Height="6" ></RowDefinition>
            <RowDefinition Height="6.0*" ></RowDefinition>
            <RowDefinition Height="*" ></RowDefinition>
        </Grid.RowDefinitions>                

        <ListView x:Name="repoView" Grid.Row="0" 
            VerticalAlignment="Stretch"
            ItemsSource="{Binding Source={StaticResource  DataProviderForListView}}">                        
            <GridView>
                <GridViewColumn Header="State"
                    DisplayMemberBinding="{Binding Path=RepositoryItemState}"/>
                <GridViewColumn Header="Working Copy Rev num."
                    DisplayMemberBinding="{Binding Path=WCRevision}"/>
                <GridViewColumn Header="Repository Rev num."
                    DisplayMemberBinding="{Binding Path=RepoRevision}"/>
                <GridViewColumn Header="User"
                    DisplayMemberBinding="{Binding Path=Account}"/>
                <GridViewColumn Header="Item"
                    DisplayMemberBinding="{Binding Path=ItemName}"/>
            </GridView>
        </ListView>

        <GridSplitter x:Name="gridSplitter" Grid.Row="1"
            ResizeDirection="Rows" Background="Gray" 
            Height="4" HorizontalAlignment="Stretch"
            Style="{StaticResource gridSplitterStyle}"/>

        <RichTextBox x:Name="rowView" Grid.Row="2" 
            BorderBrush="Bisque" VerticalAlignment="Stretch"
            IsReadOnly="True" Background="YellowGreen"
            FontFamily="Comic Sans Serif"/>


        <ToggleButton x:Name="rbWorkingCopy"
            Template="{StaticResource ToggleButtonControlTemplate}"
            Grid.Row="3" Width="100" Height="22"
            Content="{StaticResource WorkingCopyTitle}"
            HorizontalAlignment="Left" VerticalAlignment="Bottom"
            Command="repoManager:AppCommands.GetWorkingCopyInfoCommand" />
        <ToggleButton x:Name="rbRepository"
            Template="{StaticResource ToggleButtonControlTemplate}"
            Grid.Row="3"  Width="100" Height="22"
            Content="{StaticResource  RepositoryTitle}"
            HorizontalAlignment="Left"
            VerticalAlignment="Bottom"  Margin="120,0,0,0" 
            Command="repoManager:AppCommands.GetRepoInfoCommand" />
        <ProgressBar x:Name="checkRepositoryProgress" Grid.Row="3"
            Width="220" Height="22" HorizontalAlignment="Right"  
            VerticalAlignment="Bottom" Margin="250,0,10,0"
            IsIndeterminate="True"
            IsEnabled="{Binding repoManager:ExecutingCommand}"  />
    </Grid>
</DataTemplate>

Этот код программно применяется к данному объекту TabItem следующим образом:

this.ContentTemplate = FindResource("TabItemDataTemplate") as DataTemplate;

После того, как мне нужен доступ к элементу ListView, объявленному в DataTemplate, я выполняю коды, найденные в Интернете, а также на этом сайте. Вот краткий пример:

/* Getting the ContentPresenter of myListBoxItem*/          
ContentPresenter myContentPresenter =
    FindVisualChild<ContentPresenter>(this);

// this.GetVisualChild(0)
/* Finding textBlock from the DataTemplate that is set on that ContentPresenter*/
DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;

ListView repoListView = (ListView)myDataTemplate.FindName("repoView", 
    myContentPresenter);

Проблема 1: в этом случаеContentTemplate ContentPresenter имеет значение Null, поэтому выполнение кода прекращается. Prolem2: Хорошо, я думаю, может быть, мне нужно перейти непосредственно к содержимому броска TabItem, чтобы код стал более или менее:

/* Getting the ContentPresenter of myListBoxItem*/          
ContentPresenter myContentPresenter =
    FindVisualChild<ContentPresenter>(this);

// this.GetVisualChild(0)
/* Finding textBlock from the DataTemplate that is set on that ContentPresenter*/
DataTemplate myDataTemplate = this.ContentTemplate;

ListView repoListView = (ListView)myDataTemplate.FindName("repoView", 
    myContentPresenter);

this является объектом TabItem. Но странные вещи, что ContentTemplatethis полностью отличается от назначенного выше. Я уверен, что где-то что-то пропустил, вы можете помочь мне разобраться в проблеме? Спасибо.

Ответы на вопрос(3)

Ваш ответ на вопрос