Search code examples
c#uwpdatagridwinui-3windows-community-toolkit

DataGrid UWP/WinUI SelectAll function?


How to select all rows in datagrid for uwp/winui? Similar to dataGrid.SelectAl(); from WPF.

I didn't find anything about this in uwp/winUI


Solution

  • You can select all items by pressing the Control key and the A key.

    MainWindow.xaml

    <StackPanel>
        <Button
            Click="SelectAllButton_Click"
            Content="SelectAll" />
        <controls:DataGrid
            x:Name="DataGridControl"
            ItemsSource="{x:Bind Items, Mode=OneWay}"
            SelectionMode="Extended" />
    </StackPanel>
    

    MainWindow.xaml.cs

    public sealed partial class MainWindow : Window
    {
        public MainWindow()
        {
            this.InitializeComponent();
    
            Items.Add(new Item() { Id = 0, Title = "A" });
            Items.Add(new Item() { Id = 1, Title = "B" });
            Items.Add(new Item() { Id = 2, Title = "C" });
        }
    
        public ObservableCollection<Item> Items { get; set; } = new();
    
        private void SelectAllButton_Click(object sender, RoutedEventArgs e)
        {
            this.DataGridControl.Focus(FocusState.Programmatic);
    
            var keys = new[]
            {
                new InjectedInputKeyboardInfo()
                {
                    VirtualKey = (ushort)(VirtualKey.Control),
                    KeyOptions = InjectedInputKeyOptions.None,
                },
                new InjectedInputKeyboardInfo()
                {
                    VirtualKey = (ushort)(VirtualKey.A),
                    KeyOptions = InjectedInputKeyOptions.None,
                },
            };
    
            InputInjector inputInjector = InputInjector.TryCreate();
    
            // Press the keys.
            inputInjector.InjectKeyboardInput(keys);
    
            foreach (InjectedInputKeyboardInfo key in keys)
            {
                key.KeyOptions = InjectedInputKeyOptions.KeyUp;
            }
    
            // Release the keys.
            inputInjector.InjectKeyboardInput(keys);
        }
    }