WPF Datagrid的“全选”按钮 - “全部取消选择”吗?(WPF Datagrid “Sel

2019-07-20 01:56发布

我想知道是否有可能在数据网格的左上角添加功能“全选”按钮,这样它也取消选择所有行? 我有连接到一个按钮,做了这样的方法,但是这将是巨大的,如果我可以从选择解雇该方法的所有按钮,保持功能在视图中的相同部分。 可这“全选”按钮添加到它的代码,如果是这样,怎么会得到该按钮? 我一直没能找到任何实例或建议。

Answer 1:

很多搜索后,确定我发现了怎么办得到科林埃伯哈特,这里的按钮:

造型难以触及的控制模板元素与附加的行为

然后,我在他的课延长“Grid_Loaded”的方法将事件处理程序添加到按钮,但记得要删除默认的第一个“全选”命令(否则,运行我们添加了事件处理程序后,该命令获取运行)。

/// <summary>
/// Handles the DataGrid's Loaded event.
/// </summary>
/// <param name="sender">Sender object.</param>
/// <param name="e">Event args.</param>
private static void Grid_Loaded(object sender, RoutedEventArgs e)
{
    DataGrid grid = sender as DataGrid;
    DependencyObject dep = grid;

    // Navigate down the visual tree to the button
    while (!(dep is Button))
    {
        dep = VisualTreeHelper.GetChild(dep, 0);
    }

    Button button = dep as Button;

    // apply our new template
    ControlTemplate template = GetSelectAllButtonTemplate(grid);
    button.Template = template;
    button.Command = null;
    button.Click += new RoutedEventHandler(SelectAllClicked);
}

/// <summary>
/// Handles the DataGrid's select all button's click event.
/// </summary>
/// <param name="sender">Sender object.</param>
/// <param name="e">Event args.</param>
private static void SelectAllClicked(object sender, RoutedEventArgs e)
{
    Button button = sender as Button;
    DependencyObject dep = button;

    // Navigate up the visual tree to the grid
    while (!(dep is DataGrid))
    {
        dep = VisualTreeHelper.GetParent(dep);
    }

    DataGrid grid = dep as DataGrid;

    if (grid.SelectedItems.Count < grid.Items.Count)
    {
        grid.SelectAll();
    }
    else
    {
        grid.UnselectAll();
    }

    e.Handled = true;
}

本质上,如果任何行未被选中“选择所有”,如果不是它的未选中所有'。 它的工作原理非常像你所期望的选择/取消选择所有的工作,我不能相信他们并没有使该命令在默认情况下做到这一点,说实话,也许在下一版本中。

希望这可以帮助别人,无论如何,欢呼声,将



Answer 2:

我们可以添加到的CommandBinding处理全选的事件。

请参阅: 事件全部选择:WPF的Datagrid



文章来源: WPF Datagrid “Select All” button - “Unselect All” too?