ho usato una varietà di metodi per tentare di annullare la selezione cambiato evento, compreso il metodo della risposta selezionata, ma nessuno di loro ha funzionato. Questo, tuttavia, ha lavorato molto per me:
Utilizzando il gestore di eventi PreviewMouseDown per il datagrid:
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);
}
}
}
}
Ciò mantiene con successo la riga corrente selezionata se l'utente fa clic su "No", e se si clicca " Sì ", quindi l'esecuzione continuerà normalmente. Speriamo che questo aiuti qualcuno in futuro, perché ci è voluto molto tempo per trovare qualcosa che potesse funzionare per un problema apparentemente semplice.
fonte
2017-10-25 17:11:03
Sei sicuro che funzionerà? Penso che la selezione verrà modificata ma SelectedEntry no – Demarsch