如何使用IEditableObject对象在WPF DataGrid中执行单击复选框选择

sve*_*vit 3 c# wpf datagrid mvvm viewmodel

DataGridCheckBoxColumn的默认行为是用户必须单击两次才能更改复选框值.在WPF DataGrid主题中如何执行单击复选框选择有几个解决方案可以工作,但是有一个问题 - 你在代码后面有一个viewmodel对象,它实现了IEditableObject接口,然后该EndEdit方法不执行.

知道如何进行单击工作并保留IEditableObject功能吗?

mm8*_*mm8 8

您可以处理该GotFocus事件DataGrid并明确进入编辑模式并选中/取消选中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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
<DataGrid x:Name="dg" AutoGenerateColumns="False" GotFocus="dg_GotFocus">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Binding="{Binding IsChecked, UpdateSourceTrigger=PropertyChanged}" />
        ...
Run Code Online (Sandbox Code Playgroud)