Я использую DataGrid, чтобы отобразить кучу данных. У меня есть SelectionMode="Extended"
и SelectionUnit="FullRow"
.Vi перемещение через DataGrid
То, что я хотел бы быть в состоянии сделать это нажать J
, чтобы переместить фокус вниз в сетке, нажмите K
для перемещения вверх в сетке, и нажмите x
, чтобы добавить/удалить сфокусированную строку/из списка SelectedItems
(в основном так же, как gmail с быстрыми клавишами)
Мне очень удобно с wpf, но я еще не смог этого сделать. Я не уверен, что фокус строки отделен от выбранных элементов, но я понимаю, что, черт возьми, возможно, кто-то здесь сделал что-то подобное.
Вот что я пытался до сих пор
case Key.X:
{
resultsGrid.SelectedItems.Add(resultsGrid.SelectedItem);
e.Handled = true;
break;
}
case Key.J:
{
//down
var currow = (DataGridRow) resultsGrid.ItemContainerGenerator.ContainerFromItem(resultsGrid.SelectedItem);
currow.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down));
//if (resultsGrid.SelectedIndex + 1 >= resultsGrid.Items.Count)
// resultsGrid.SelectedIndex = 0;
//else
// resultsGrid.SelectedIndex++;
break;
}
case Key.K:
{
//up
var currow =
(DataGridRow) resultsGrid.ItemContainerGenerator.ContainerFromItem(resultsGrid.SelectedItem);
currow.MoveFocus(new TraversalRequest(FocusNavigationDirection.Up));
//if (resultsGrid.SelectedIndex - 1 <= 0)
// resultsGrid.SelectedIndex = resultsGrid.Items.Count - 1;
//else
// resultsGrid.SelectedIndex--;
break;
}
В настоящее время текущая строка не перемещается вверх или вниз. Я также пробовал FocusNavigationDirection.Previous
и Next
, и они также не перемещают фокус. Если я иду по индексу, он перемещается, но нажатие X не добавляет к списку выбранных элементов. Это кажется несколько выбора не хочет пинать, пока вы не будете использовать сдвиг и вверх/вниз или смещение мыши
редактировать
Ok, так что я понял, как перемещаться с помощью клавиши j
и k
, но выбор еще не работает. Если я двигаюсь вверх или вниз, он очищает выбор, также нажатие x
ничего не делает, визуально, по крайней мере.
case Key.X:
resultsGrid.SelectedItems.Add(resultsGrid.SelectedItem);
e.Handled = true;
break;
case Key.J:
{
//down
InputManager.Current.ProcessInput(new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Down)
{
RoutedEvent = Keyboard.KeyDownEvent
});
resultsGrid.ScrollIntoView(resultsGrid.SelectedItem);
e.Handled = true;
break;
}
case Key.K:
{
//up
InputManager.Current.ProcessInput(new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Up)
{
RoutedEvent = Keyboard.KeyDownEvent
});
resultsGrid.ScrollIntoView(resultsGrid.SelectedItem);
e.Handled = true;
break;
}
'Вот что я пробовал до сих пор' - Ницца. Какие у вас проблемы с вашим текущим подходом? –
Да, поэтому текущая строка не перемещается вверх или вниз. Я также пробовал FocusNavigationDirection.Previous и Next, и они не работают. Если я иду по индексу, они перемещаются, но нажатие X не добавляет к списку выбранных элементов. Кажется, multi select не хочет пинать до тех пор, пока вы не нажмете shift и вверх/вниз или сдвиньте мышью. –