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

Posted

技术标签:

【中文标题】如何使用 IEditableObject 对象在 WPF DataGrid 中执行单击复选框选择【英文标题】:How to perform Single click checkbox selection in WPF DataGrid with IEditableObject object 【发布时间】:2017-08-10 21:39:54 【问题描述】:

DataGridCheckBoxColumn 的默认行为是用户必须单击两次才能更改复选框值。在How to perform Single click checkbox selection in WPF DataGrid 主题中,有几个可行的解决方案,但有一个问题 - 你在代码后面有一个视图模型对象,它实现了IEditableObject 接口,然后EndEdit 方法不执行。

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

【问题讨论】:

【参考方案1】:

您可以为DataGrid 处理GotFocus 事件并显式进入编辑模式并选中/取消选中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;
                
            
        

【讨论】:

以上是关于如何使用 IEditableObject 对象在 WPF DataGrid 中执行单击复选框选择的主要内容,如果未能解决你的问题,请参考以下文章

将自定义列表序列化为json c#

如何在托管对象上下文之外使用核心数据对象?

如何在对象识别中使用 SVM

如何在 swift 中使用 AnyObject 将结构转换为对象

如何使用 MongoDB 在数组中的对象中更新数组中的对象中的文档?

MagicalRecord 如何在关系中添加对象