Буфер обмена данных WPF получает значение ячейки - PullRequest
0 голосов
/ 15 ноября 2018

Мне нужно обработать функцию Ctrl + C в моей сетке данных, особенно мне нужно получить ячейку с выбранным значением. Вот XAML-код таблицы данных. Обратите внимание, что я использую DataGridTextColumn

<DataGrid x:Name="GridFormule" Grid.Row="0" BorderBrush="#abadb3" CanUserSortColumns="true" Sorting="GridFormule_Sorting" MaxColumnWidth="Infinity" Style="{DynamicResource DataGridStyle}" ColumnHeaderStyle="{DynamicResource DataGridColumnHeaderStyle}" ItemsSource="{Binding ElementName=ObjectsTree, Path=SelectedItem.Infos}" CellEditEnding="GridFormule_CellEditEnding" Margin="8,5,2,0" ContextMenu="{StaticResource cntextListe}">
    <!-- OVERRIDE COPY CONTROL -->
    <DataGrid.InputBindings>
        <KeyBinding Key="C" Modifiers="Control" Command="Copy" />
    </DataGrid.InputBindings>
    <DataGrid.CommandBindings>
        <CommandBinding Command="Copy" Executed="Comandi_Executed" />
    </DataGrid.CommandBindings>
    <!-- /OVERRIDE COPY CONTROL -->
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Field.Formula.Formula, Mode=TwoWay}" Header="@_57_Formule" Foreground="Black" Width="*" ClipboardContentBinding="{Binding Field.Formula.Formula, Mode=TwoWay}">
            <DataGridTextColumn.ElementStyle>
                <Style TargetType="{x:Type TextBlock}">
                    <Setter Property="Padding" Value="4" />
                    <Setter Property="FontWeight" Value="Normal" />
                    <Setter Property="FontSize" Value="11.55" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsDirty}" Value="True">
                            <Setter Property="TextBlock.Background" Value="{StaticResource IsDirtyColor}" />
                            <Setter Property="Padding" Value="4" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </DataGridTextColumn.ElementStyle>
            <DataGridTextColumn.EditingElementStyle>
                <Style TargetType="TextBox">
                    <Setter Property="Background" Value="White"></Setter>
                    <Setter Property="Padding" Value="2,4,2,3"></Setter>
                    <Setter Property="BorderThickness" Value="0"></Setter>
                </Style>
            </DataGridTextColumn.EditingElementStyle>
        </DataGridTextColumn>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>     

Код для обработки копии:

private void Comandi_Executed(object sender, ExecutedRoutedEventArgs e)
{
    RoutedUICommand c = (RoutedUICommand)e.Command;
    switch (c.Name)
    {
        // Copia
        case "Copy":
            DataGrid sel = (sender as DataGrid);
            if (sel == null) return;
            if (sel.CurrentItem != null) return;

            var cc = sel.CurrentColumn;
            Binding binding = (Binding)cc;

            // Here I get the property Name!
            string BoundPropName = binding.Path.Path;                    

            try
            {
                //Clipboard.SetDataObject(text);
            }
            catch (Exception ex)
            {
                Global.LOG.Log(ex.Message);
            }
            break;
    }
}       

По сути, мое BoundPropName возвращает значение «Field.Formula.Formula» вместо значения, видимого в ячейке сетки данных. Как я могу получить значение ячейки?

...