数据网格复选框自动化

Posted

技术标签:

【中文标题】数据网格复选框自动化【英文标题】:Data grid checkbox automation 【发布时间】:2010-12-02 09:53:14 【问题描述】:

我有一个带有复选框的数据网格。当我单击单元格时,我希望在选择包含它的单元格时自动选中复选框。它现在正在做的是我需要选择单元格然后单击复选框,这对我们来说很烦人。

<dg:DataGrid Name="GridUsureOperation" Margin="10,444,82,6" ItemsSource="Binding" Style="StaticResource GridMenu" SelectionMode="Single" SelectionUnit="Cell">
    <dg:DataGrid.Columns>
        <dg:DataGridTextColumn Header="Opération" Width="*" MinWidth="60" 
                               Binding="Binding Operation.DescOperation" 
                               IsReadOnly="True" />
        <dg:DataGridTextColumn Header="Dernière maintenance" Width="SizeToHeader" MinWidth="50"
                               Binding="Binding DateDerniereMaintenance, StringFormat=yyyy-MM-dd" 
                               IsReadOnly="True"/>
        <dg:DataGridTextColumn Header="Usure dernière maintenance" Width="SizeToHeader" MinWidth="50"
                               Binding="Binding UsureDerniereOperation" 
                               IsReadOnly="True"/>
        <dg:DataGridTextColumn Header="Fréquence(usure)" Width="SizeToHeader" MinWidth="50"
                               Binding="Binding QteUsure" 
                               IsReadOnly="True"/>
        <dg:DataGridTextColumn Header="Unité" Width="SizeToHeader" MinWidth="50"
                               Binding="Binding TypeUsure.Description" 
                               IsReadOnly="True"/>
        <dg:DataGridCheckBoxColumn Header="Forcer?" Width="SizeToHeader" MinWidth="50"
                               Binding="Binding AfficherMaintenance"                                         
                               IsReadOnly="False">

        </dg:DataGridCheckBoxColumn>
    </dg:DataGrid.Columns>
</dg:DataGrid>

【问题讨论】:

【参考方案1】:

我不喜欢使用 DataGridCheckBoxColumn,因为它需要先获得焦点,然后才能与复选框交互。所以我改为在模板列中放置一个 CheckBox,您只需单击一下即可更改状态。

<dg:DataGridTemplateColumn Width="SizeToHeader">
    <dg:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox IsChecked="Binding Path=Selected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged" Margin="2,0,2,0" />
        </DataTemplate>
    </dg:DataGridTemplateColumn.CellTemplate>
</dg:DataGridTemplateColumn>

但是,如果您确实希望复选框在单击单元格中的任意位置(而不仅仅是在复选框上)时更改状态,您可以使用以下代码,这会使 CheckBox 控件占据整个单元格的大小。

<dg:DataGridTemplateColumn Width="SizeToHeader">
    <dg:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox IsChecked="Binding Path=Selected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged" Margin="2,0,2,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
        </DataTemplate>
    </dg:DataGridTemplateColumn.CellTemplate>
</dg:DataGridTemplateColumn>

更新 我已经有一段时间没有做过 WPF 开发了。现在我在使用这个解决方案时遇到了一个问题,因为 DataGrid 已被烘焙到 WPF 库中,并且您不再需要该工具包。复选框不想像之前写的那样更新支持属性,所以我添加了一个更完整的绑定语句,似乎确实有效。

【讨论】:

谢谢,我不介意他们是否必须直接点击 chcekbox。我不想要的是必须获得焦点才能点击它。

以上是关于数据网格复选框自动化的主要内容,如果未能解决你的问题,请参考以下文章

KivyMD RecycleView 网格中的复选框操作重复

数据网格 Flex 中的 Flex 对齐复选框

从视图模型中选择数据网格行中的所有复选框

如何单击嵌套在数据网格内的数据网格中的复选框

C# ASP.NET 数据网格复选框

如何让复选框在 WPF 数据网格中工作