2017-06-06 4 views
1

J'ai un DataGrid WPF avec une colonne:Override copie passé fonctionnalité d'une vue grille WPF

<DataGrid Name="myGRID"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="myHeader Binding="{Binding myObservableCollection}"> 
      <DataGridTextColumn.HeaderStyle> 
       <Style TargetType="DataGridColumnHeader"> 
        <Setter Property="HorizontalContentAlignment" Value="Center" /> 
       </Style> 
      </DataGridTextColumn.HeaderStyle> 
      <DataGridTextColumn.ElementStyle> 
       <Style TargetType="TextBlock"> 
        <Setter Property="HorizontalAlignment" Value="Center" /> 
       </Style> 
      </DataGridTextColumn.ElementStyle> 
      <DataGridTextColumn.EditingElementStyle> 
       <Style TargetType="{x:Type TextBox}"> 
        <EventSetter Event="TextChanged" Handler="tbx_ConcernEnter_TextChanged"/> 
       </Style> 
      </DataGridTextColumn.EditingElementStyle> 
     </DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 

Maintenant, je veux remplacer la fonction coller des lignes. Quand je utiliser:

<DataGrid> 
<CommandBinding Command="Paste" Executed="CommandBinding_Executed"/> 
</DataGrid> 

cela semble être la dérogation pour l'ensemble GridView mais pas pour une ligne spécifique.

Savez-vous comment remplacer cela?

+0

ligne spécifique? Voulez-vous dire une colonne spécifique? – mm8

+0

Non, je veux cliquer sur une ligne spécifique de ma grille et dire "passé" par exemple. Cela doit appeler une fonction dans mon codebehind –

+0

Cela devrait se produire lorsque vous cliquez sur * n'importe quelle ligne puis, non? Quelle est la différence entre ceci et "ceci semble être l'override pour tout le GridView mais pas pour une rangée spécifique"? – mm8

Répondre

3

Le TextBox dans le CellEditingTemplate "avale" la commande de collage. Mais vous pouvez gérer l'événement Loaded pour le TextBox et brancher un gestionnaire d'événements Pasting lui:

<DataGridTextColumn.EditingElementStyle> 
    <Style TargetType="{x:Type TextBox}"> 
     <EventSetter Event="TextChanged" Handler="tbx_ConcernEnter_TextChanged"/> 
     <EventSetter Event="Loaded" Handler="TextBox_Loaded" /> 
    </Style> 
</DataGridTextColumn.EditingElementStyle> 

private void TextBox_Loaded(object sender, RoutedEventArgs e) 
{ 
    TextBox textBox = sender as TextBox; 
    DataObject.AddPastingHandler(textBox, OnPaste); 
} 

private void OnPaste(object sender, DataObjectPastingEventArgs e) 
{ 
    //paste detected... 
} 
+0

Cela fonctionne. Merci beaucoup mm8 pour votre patience! –