2016-08-20 5 views
0

Ich habe viele TabItem s, aber nur eine DataGrid in einer DataTemplate.Zugriff Datatemplate mit Name

Jetzt werde ich die DataGrid zugreifen, weil ich den Inhalt ändern will ...

<Window.Resources> 
    <DataTemplate x:Key="ContentTabItem"> 
     <DataGrid Grid.Row="1" Name="_uiDataGrid"/> 
    </DataTemplate> 
</Window.Resources> 
<Grid> 
    <TabControl Name="_uiTabControl" SelectionChanged="_uiTabControl_SelectionChanged"> 
     <TabItem Name="_uiTabItembla1" Header="bla1" ContentTemplate="{StaticResource ResourceKey=ContentTabItem}"/> 
     <TabItem Name="_uiTabItembla2" Header="bla2" ContentTemplate="{StaticResource ResourceKey=ContentTabItem}"/> 
    </TabControl> 
</Grid> 

Ich kippe Zugang mit dem Namen _uiDataGrid

+0

Werfen Sie einen Blick auf diese: https://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx – Sameed

Antwort

0

Probieren Sie etwas wie dies die Datenraster aus dem Inhalt zu erhalten Moderatoren Inhaltsvorlage:

var contentPresenter = FindVisualChild<ContentPresenter>(_uiTabControl); 
var dt = contentPresenter.ContentTemplate; 
var datagrid = DataTemplateName.FindName("_uiDataGrid", contentPresenter) 
as DataGrid; 

Für die visuelle Kind zu finden, beziehen sich die Funktionen FindVisualChildren() und FindVisualChild() wie in this stackoverflow post. erwähnt

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) 
     where T : DependencyObject 
{ 
    if (depObj != null) 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
     { 
      DependencyObject child = VisualTreeHelper.GetChild(depObj, i); 
      if (child != null && child is T) 
      { 
       yield return (T)child; 
      } 

      foreach (T childOfChild in FindVisualChildren<T>(child)) 
      { 
       yield return childOfChild; 
      } 
     } 
    } 
} 

public static childItem FindVisualChild<childItem>(DependencyObject obj) 
    where childItem : DependencyObject 
{ 
    foreach (childItem child in FindVisualChildren<childItem>(obj)) 
    { 
     return child; 
    } 

    return null; 
}