从嵌套的DataGrid复制

时间:2015-01-27 08:23:21

标签: c# wpf mvvm 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>
    ...  

如何从内部(子)和外部(父)DataGrid复制数据?

1 个答案:

答案 0 :(得分:0)

我会用两种方法来解决这个问题:

第一个:

尝试将上下文菜单创建为资源并将其(相同的实例)分配给父DataGrids和子DataGrids,这是基于我假设MS Window的默认行为是复制关联项的选择。

第二个:

如果第一个不起作用。为ContextMenu创建一个行为,它提取PlacementTarget(即你的父DataGrid),然后运行它的Items(即Rows)并从中提取DataGrid(你的子DataGrid)

这可以通过使用 VisualTreeHelper 或从他们自己的元素公开的属性或两者的组合来实现。