Qu'est-ce que le “appuyé sur la touche " supprimer” de l'événement pour le WPF Datagrid?

Je veux permettre à l'utilisateur de mettre en surbrillance une ligne sur le WPF DataGrid et appuyez sur la touche supprimer de pour supprimer la ligne.

  • la fonctionnalité est déjà intégré dans l'INTERFACE utilisateur de la grille, donc, pour l'utilisateur, la ligne disparaît
  • Je suis actuellement gérer cela sur le événement SelectionChanged (code ci-dessous)
  • Je boucle à travers tous les "e.RemovedItems" et supprimez-les avec LINQ

Problème est: même lorsque vous simplement sélectionnez une ligne et de les déplacer hors de lui, le changement est tiré et que la ligne est dans e.RemovedItems (ce qui est étrange, pourquoi serait tout simplement de choisir quelque chose de la mettre dans un RemovedItems conteneur?).

Donc je suis à la recherche d'un DeleteKeyPressed événement afin que je puisse simplement le gérer. Qu'est-ce que cet événement appelé?

Je suis en utilisant le Mars 2009 à outils.

XAML:

<Grid DockPanel.Dock="Bottom">
    <toolkit:DataGrid x:Name="TheDataGrid" 
                      SelectionChanged="TheDataGrid_SelectionChanged"
                      AutoGenerateColumns="True"
                      RowEditEnding="TheDataGrid_RowEditEnding"/>

code-behind:

private void TheDataGrid_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
    if (e.RemovedItems.Count > 0)
    {
        Message.Text = "The following were removed: ";
        foreach (object obj in e.RemovedItems)
        {
            Customer customer = obj as Customer;
            Message.Text += customer.ContactName + ",";
            _db.Order_Details.DeleteAllOnSubmit(
                customer.Orders.SelectMany(o => o.Order_Details));
            _db.Orders.DeleteAllOnSubmit(customer.Orders);
            _db.Customers.DeleteOnSubmit(customer);
        } 
    }

    try
    {
        _db.SubmitChanges();
    }
    catch (Exception ex)
    {
        Message.Text = ex.Message;
    }
}

RÉPONSE:

Grâce lnferis, c'est exactement ce que je cherchais, voici mon terminé de supprimer l'événement de gestion pour le contrôle datagrid, note l'événement KeyDown ne pas le feu pour une raison quelconque.

XAML:

<toolkit:DataGrid x:Name="TheDataGrid" 
                  KeyDown="TheDataGrid_KeyDown"
                  PreviewKeyDown="TheDataGrid_PreviewKeyDown"
                  AutoGenerateColumns="True"
                  RowEditEnding="TheDataGrid_RowEditEnding"/>

code-behind

private void TheDataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Delete)
{
var grid = (DataGrid)sender;
if (grid.SelectedItems.Count > 0)
{
string checkMessage = "The following will be removed: ";
foreach (var row in grid.SelectedItems)
{
Customer customer = row as Customer;
checkMessage += customer.ContactName + ",";
}
checkMessage = Regex.Replace(checkMessage, ",$", "");
var result = MessageBox.Show(checkMessage, "Delete", MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK)
{
foreach (var row in grid.SelectedItems)
{
Customer customer = row as Customer;
_db.Order_Details.DeleteAllOnSubmit(
customer.Orders.SelectMany(o => o.Order_Details));
_db.Orders.DeleteAllOnSubmit(customer.Orders);
_db.Customers.DeleteOnSubmit(customer);
}
_db.SubmitChanges();
}
else
{
foreach (var row in grid.SelectedItems)
{
Customer customer = row as Customer;
LoadData();
_db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, customer); //TODO: this doesn't refresh the datagrid like the other instance in this code
}
}
}
}
}
private void TheDataGrid_KeyDown(object sender, KeyEventArgs e)
{
Console.WriteLine("never gets here for some reason");
}
  • Le KeyDown ne devrait jamais arriver là parce que c'est déjà gestionnaire d'e.Manipulés = true) dans le précédent gestionnaire dans la bulle.