ich eine Vielzahl von Methoden verwendet, um zu versuchen, die Auswahl geändert Veranstaltung abzusagen, einschließlich der Methode aus der gewählten Antwort, aber keiner von ihnen hat funktioniert. Dies ist jedoch für mich groß ist:
den Preview Event-Handler für das Datagrid verwenden:
private void dataGrid_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
//get the item I am clicking on (replace MyDataClass with datatype in datagrid)
var myItem = (e.OriginalSource as FrameworkElement).DataContext as MyDataClass;
//check if item is different from currently selected item
if (myItem != dataGrid.SelectedItem)
{
//save message dialog
MessageBoxResult result = MessageBox.Show("Changes will be lost. Are you sure?", "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question);
//if click no, then cancel the event
if (result == MessageBoxResult.No)
{
e.Handled = true;
}
else
{
//otherwise, reinvoke the click event
dataGrid.Dispatcher.BeginInvoke(
new Action(() =>
{
RoutedEventArgs args = new MouseButtonEventArgs(e.MouseDevice, 0, e.ChangedButton);
args.RoutedEvent = UIElement.MouseDownEvent;
(e.OriginalSource as UIElement).RaiseEvent(args);
}),
System.Windows.Threading.DispatcherPriority.Input);
}
}
}
}
Dies hält erfolgreich die aktuelle Zeile ausgewählt, wenn der Benutzer klickt auf „Nein“, und wenn sie auf " Ja ", dann wird die Ausführung normal fortgesetzt. Hoffentlich hilft das jemandem in der Zukunft, weil es lange gedauert hat, etwas zu finden, das für ein scheinbar einfaches Problem funktionieren würde.
Sind Sie sicher, dass dies funktioniert? Ich denke, die Auswahl wird geändert, aber SelectedEntry nicht – Demarsch