В зависимости от того, как вы получаете уведомление о выборе элемента для расширения, вам нужно будет найти строку, в которой находится пользователь:
DataGridRow row = DataGridRow.GetRowContainingElement(...);
и обновить видимость деталей строки:
row.DetailsVisibility = Visibility.Visible;
Помимо этих деталей, вам нужно создать стиль для строк с подробностями, который связан с событием, которое вы можете прослушать:
<DataTemplate x:Key="DetailsRowTemplate">
<StackPanel>
<Border BorderBrush="{StaticResource BlackBrush}" BorderThickness="0,2,0,0" Padding="0" >
<data:DataGrid ItemsSource="{Binding DummyResultsView}" AutoGenerateColumns="False"
LoadingRow="DataGrid_LoadingRow"
CanUserResizeColumns="False"
CanUserReorderColumns="False"
HeadersVisibility="None"
IsReadOnly="True">
</data:DataGrid>
</Border>
</StackPanel>
</DataTemplate>
, который устанавливается как шаблон RowDetailsTemplate для вашей сетки:
В событии LoadingRow вы можете получить ссылку на контекст данных и сохранить ссылку на дочернюю сетку данных, чтобы после вызова WCF вы могли установить ItemsSource:
private void DataGrid_LoadingRowDetails(object sender, DataGridRowDetailsEventArgs e)
{
List<DataGrid> detailElements = e.DetailsElement.GetChildrenByType<System.Windows.Controls.DataGrid>().ToList();
var itemSelected = e.Row.DataContext;
if (detailElements.Count > 0)
{
DataGrid detailsDataGrid = detailElements[0];
// save a reference so the ItemsSource can be set later....
this.DataGrid = detailsDataGrid;
this.Model.InitializeDetailsList(detailsDataGrid, itemSelected);
}
}
Надеюсь, это поможет,