如何在带有IEditableObject对象的WPF DataGrid中实现单击复选框选择

3
DataGridCheckBoxColumn的默认行为是,用户需要点击两次才能更改复选框的值。在如何在WPF DataGrid中执行单击复选框选择主题中有一些解决方案可以解决该问题,但存在一个问题-如果您在代码后台中使用视图模型对象,并实现了IEditableObject接口,则EndEdit方法不会执行。

您有什么想法可以使单击生效并保留IEditableObject功能?

2个回答

9

您可以处理DataGridGotFocus事件,显式进入编辑模式并勾选/取消勾选CheckBox:

private void dg_GotFocus(object sender, RoutedEventArgs e)
{
    DataGridCell cell = e.OriginalSource as DataGridCell;
    if (cell != null && cell.Column is DataGridCheckBoxColumn)
    {
        dg.BeginEdit();
        CheckBox chkBox = cell.Content as CheckBox;
        if (chkBox != null)
        {
            chkBox.IsChecked = !chkBox.IsChecked;
        }
    }
}

<DataGrid x:Name="dg" AutoGenerateColumns="False" GotFocus="dg_GotFocus">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Binding="{Binding IsChecked, UpdateSourceTrigger=PropertyChanged}" />
        ...

2

使用同一方法处理所有复选框

private void GotFocus(object sender, RoutedEventArgs e)
        {
            var sen = sender as DataGrid;
            DataGridCell cell = e.OriginalSource as DataGridCell;
            if (cell != null && cell.Column is DataGridCheckBoxColumn)
            {
                sen.BeginEdit();
                CheckBox chkBox = cell.Content as CheckBox;
                if (chkBox != null)
                {
                    chkBox.IsChecked = !chkBox.IsChecked;
                }
            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接