You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中仅用XAML实现DataGrid选中行时勾选对应CheckBox

解决WPF DataGrid行选中时自动勾选对应CheckBox的纯XAML方案

我明白你想纯用XAML实现DataGrid行选中时,该行内的CheckBox自动变为勾选状态的需求,之前尝试的DataGridCell Style触发器失效,是因为CheckBox1位于DataTemplate内部——模板里的控件属于独立的作用域,外部的DataGridCell样式无法直接访问到模板内的元素。

下面是纯XAML的解决方案,核心思路是在CellTemplate的DataTemplate内部,给CheckBox添加一个绑定到父级DataGridRow.IsSelected的DataTrigger:

<DataGrid Name="ChargeDataGrid" Grid.Row="1" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn Width="*">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <CheckBox x:Name="CheckBox1">
                            <CheckBox.Style>
                                <Style TargetType="CheckBox">
                                    <Style.Triggers>
                                        <!-- 绑定到当前行的IsSelected属性,选中时自动勾选CheckBox -->
                                        <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=DataGridRow}}" Value="True">
                                            <Setter Property="IsChecked" Value="True"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </CheckBox.Style>
                        </CheckBox>
                        <TextBlock Text="{Binding}" />
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.HeaderTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <CheckBox />
                        <TextBlock Text="Title" />
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.HeaderTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
    <system:String>123</system:String>
    <system:String>124</system:String>
    <system:String>125</system:String>
    <system:String>126</system:String>
    <system:String>127</system:String>
</DataGrid>

补充说明:

  • 这里用RelativeSource={RelativeSource AncestorType=DataGridRow}来找到当前CheckBox所在的DataGrid行,绑定它的IsSelected属性。
  • 如果需要实现双向联动(勾选CheckBox时也选中对应行),可以直接用双向绑定替代触发器,写法更简洁:
    <CheckBox x:Name="CheckBox1" IsChecked="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=DataGridRow}, Mode=TwoWay}"/>
    

内容的提问来源于stack exchange,提问作者dihiddie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:31:57