2015-01-27 2 views
1

У меня есть DataGrid, отображающий дочерние данные, вложенные в внешний родительский DataGrid, и я хочу скопировать все выбранные ячейки (родительский и дочерний).Копирование из вложенного DataGrid

Я включил следующее контекстное меню в моем внешнем DataGrid, который успешно копирует родительские данные:

<DataGrid Grid.Column="2" Name="dgCalls" ItemsSource="{Binding FoundCallsList}" 
      AutoGenerateColumns="False" Background="{DynamicResource WindowBackgroundBrush}" 
      IsReadOnly="True"> 

    <DataGrid.ContextMenu> 
    <ContextMenu> 
     <MenuItem Command="Copy"> 
     <MenuItem.Icon> 
      <Image Source="..\resources\CopyHS.png" /> 
     </MenuItem.Icon> 
     </MenuItem> 
    </ContextMenu> 
    </DataGrid.ContextMenu> 
    ... 

Я пытался добавить этот код к внутреннему DataGrid, но безрезультатно. Если я выберу родительские и дочерние данные и скопирую их, при вставке я получаю только внешние данные. Если я выбираю только дочерние данные, при вставке я получаю пустую строку.

Xaml для внутренней сетки, если это помогает:

<DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
    <DataGrid ItemsSource="{Binding CallQueries}" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
     <DataGridTemplateColumn Header="Question" Width="450"> 
      <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <TextBlock VerticalAlignment="Stretch" HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding QueryQuestion}" /> 
      </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    ... 

Как скопировать данные из обоих innner (ребенка) и внешней (родительской) DataGrid?

+0

Можете ли вы предоставить пример кода? –

+0

@ a.azemia Xaml использует встроенное свойство ApplicationCommands.Copy, которое использует реализацию в элементе управления. Нет кода .cs с этой проблемой (хотя я ожидаю, что придется написать некоторые). – mcalex

ответ

0

я бы об этом в двух подходах:

Первое:

Попробуйте создать контекстное меню в качестве ресурса и назначения его (те же экземпляры) в оба родителя и ребенка DataGrids, это основано на моем предположении, что поведение MS Window по умолчанию копирует выбранные элементы.

Второе:

если первый не работает. создать поведение для ContextMenu, который извлекает PlacementTarget (т.е. ваш родительский DataGrid), а затем запускает на это Items (т.е. строк) и извлекает DataGrid (ваш ребенок DataGrids) из них

Это может быть достигнуто с помощью VisualTreeHelper или Свойства, выставленные из Элементов, их самих или их комбинации.

Смежные вопросы