private void RowMouseDownHandler(object sender, System.Windows.Input.MouseButtonEventArgs e) { if (e.LeftButton == System.Windows.Input.MouseButtonState.Pressed && System.Windows.Input.Keyboard.PrimaryDevice.Modifiers == System.Windows.Input.ModifierKeys.Shift) { DataGridRow row = sender as DataGridRow; //GetVisualParentByType((System.Windows.FrameworkElement)e.OriginalSource, typeof(DataGridRow)) as DataGridRow; if (row != null && row.DataContext != null && row.DataContext is ISelectable) { var rowItem = row.DataContext as ISelectable; DataGrid dg = row.GetVisualParentOfType <DataGrid>(); if (dg != null && dg.ItemsSource != null && dg.SelectedItem != null) { if (dg.ItemsSource is System.Collections.Generic.IEnumerable <ISelectable> ) { var dgSelItem = dg.SelectedItem as ISelectable; var allItems = dg.ItemsSource as System.Collections.Generic.IEnumerable <ISelectable>; var view = CollectionViewSource.GetDefaultView(allItems); var itemsFromSel = view.OfType <ISelectable>().SkipWhile(i => i != dgSelItem && i != rowItem).Skip(1).TakeWhile(i => i != dgSelItem && i != rowItem).Where(i => !i.IsSelected).ToArray(); Array.ForEach(itemsFromSel, i => i.IsSelected = true); } } } } }