2013-07-13 7 views
2

Ниже моя XAML:Как получить доступ к элементу управления внутри DataGrid.RowDetailsTemplate?

<DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
     <DataGrid Name="innerGrid" IsReadOnly="True" AutoGenerateColumns="False" Margin="10,10,5,5" Width="400" HorizontalAlignment="Left"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Ref" Binding="{Binding Id}"/> 
       <DataGridTextColumn Header="Investor" Binding="{Binding FundProvider.FullName}"/> 
       <DataGridTextColumn Header="Amount" Binding="{Binding InvestmentAmount}"/> 
      </DataGrid.Columns> 
     </DataGrid>             
    </DataTemplate> 
</DataGrid.RowDetailsTemplate> 

Мой вопрос, как получить доступ к innerGridDataGrid управления из кода. Заранее спасибо.

+0

Почему вы хотите получить доступ к нему в коде? Ваши внутренние столбцы сетки привязаны к данным, поэтому свяжите «ItemsSource» внутренней сетки и обработайте ее в ViewModel – dkozl

+0

на самом деле, я хочу сделать, когда дерево выпадает при щелчке по узлу. я хочу добавить коллапс и расширить функции –

+0

, а затем поместить вашу внутреннюю сетку в 'Expander' – dkozl

ответ

1

Доступ к внутренней базе данных DataGrid в LoadingRowDetails события (msdn).

private void outerGrid_LoadingRowDetails(object sender, DataGridRowDetailsEventArgs e) 
{ 
    DataGrid innerGrid = e.DetailsElement as DataGrid; 
    if (innerGrid != null) 
    { 

    } 
} 
0

Спасибо kmatyaszek за правильный ответ. Раньше я пытался с RowDetailsTemplate.LoadContent(), который не обновлял пользовательский интерфейс, хотя мог получить объекты.

Вот мой обновленный пример кода:

void gridEmployee_LoadingRowDetails(object sender, DataGridRowDetailsEventArgs e) 
    { 
     Border border = e.DetailsElement as Border; 

     if (border != null) 
     { 
      foreach (var grid in border.GetVisualChildren()) 
      { 
       Grid grid_ = grid as Grid; 

       if (grid_ != null) 
       { 
        foreach (var textBlock in grid_.GetVisualChildren()) 
        { 
         TextBlock textBlock_ = textBlock as TextBlock; 

         if (textBlock_ != null && textBlock_.Text == "City : ") 
         { 
          textBlock_.Text = "My assigned text..."; 
         } 
        } 
       } 
      } 
     } 
    } 
Смежные вопросы