DataGridCheckBoxColumn OnClick 事件在首次单击时未触发

DataGridCheckBoxColumn OnClick event not firing on first click

提问人:rekcul 提问时间:12/7/2022 最后编辑:rekcul 更新时间:12/7/2022 访问量:116

问:

我在 DataGridCheckBoxColumn 中遇到了一个奇怪的 OnClick 事件,该事件在第一次检查/取消检查单击时没有触发。下面是 xaml、代码隐藏和视图模型中的一些代码示例:

XAML

<DataGrid.Columns>
    <DataGridCheckBoxColumn Width="1*"
                            Binding="{Binding IsAssigned, UpdateSourceTrigger=PropertyChanged}"
                            IsReadOnly="False">
        <DataGridCheckBoxColumn.CellStyle>
            <Style>
                <EventSetter Event="CheckBox.Click"
                             Handler="OnClick" />
            </Style>
        </DataGridCheckBoxColumn.CellStyle>
    </DataGridCheckBoxColumn>
</DataGrid.Columns>

“IsAssigned”是绑定的 Object 中可用的 bool 属性。这绝对有效。

代码隐藏

public void OnClick(object sender, RoutedEventArgs e)
{
    // Retrieving the parameter object from sender
    // and doing some other stuff here...
    // ...
    viewModel.ObjectsToChange(parameterObjectFromDataGridCell);
}

查看模型

internal void ObjectsToChange(object parameterObjectFromDataGridCell)
{
    // do some stuff
}

为什么不使用 OnChecked/OnUnchecked 事件?

我不使用 OnChecked 或 OnUnchecked 事件,因为它们是在加载 DataGrid 期间触发的。由于我没有找到区分初始加载和用户触发的实际 Checked/Unchecked 事件的解决方案,因此我决定尝试 OnClick 事件。

问题:

为什么它会忽略第一次检查/取消选中单击?任何进一步的点击都会被识别。

C# WPF 事件

评论

0赞 ASh 12/7/2022
stackoverflow.com/questions/3833536/......
0赞 rekcul 12/7/2022
提出的问题与我的问题非常相似,但不等于我的问题。就我而言:是的,第一次单击是选择数据网格行,但我不在乎该单击。第一次选中/取消选中单击也会被忽略,并且不会触发任何事件。

答:

0赞 mm8 12/7/2022 #1

将 替换为DataGridCheckBoxColumnDataGridTemplateColumn

<DataGridTemplateColumn Width="1*" IsReadOnly="False">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox IsChecked="{Binding IsAssigned, UpdateSourceTrigger=PropertyChanged}"
                      Click="OnClick"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

正是前者导致了你正在经历的行为。