Używałem różnych metod, aby spróbować, aby anulować wybór zmieniło zdarzenie, w tym metodę od wybranej odpowiedzi, ale żaden z nich nie działał. To jednak pracował wielki dla mnie:
Używanie PreviewMouseDown zdarzeń obsługi dla 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);
}
}
}
}
to z powodzeniem utrzymuje bieżący wiersz wybrany, gdy użytkownik kliknie „Nie”, a jeśli kliknij " Tak ", wtedy wykonanie będzie kontynuowane jak zwykle. Mam nadzieję, że pomoże to komuś w przyszłości, ponieważ znalezienie czegoś, co zadziałałoby dla pozornie prostego problemu, zajęło dużo czasu.
Czy na pewno to zadziała? Myślę, że wybór zostanie zmieniony, ale SelectedEntry nie – Demarsch