提问人:rekcul 提问时间:12/7/2022 最后编辑:rekcul 更新时间:12/7/2022 访问量:116
DataGridCheckBoxColumn OnClick 事件在首次单击时未触发
DataGridCheckBoxColumn OnClick event not firing on first click
问:
我在 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 事件。
问题:
为什么它会忽略第一次检查/取消选中单击?任何进一步的点击都会被识别。
答:
0赞
mm8
12/7/2022
#1
将 替换为DataGridCheckBoxColumn
DataGridTemplateColumn
<DataGridTemplateColumn Width="1*" IsReadOnly="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsAssigned, UpdateSourceTrigger=PropertyChanged}"
Click="OnClick"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
正是前者导致了你正在经历的行为。
评论