我正在努力使用 DataGrid 捕获事件。我想要实现的是,当用户在数据网格单元格的复选框上单击一次时,会触发一个事件,我可以获得当前单元格值。但是,CellChangedEvent 仅在选择更改时触发,而 CellEditingEvent 要么在单元格失去焦点时触发,要么从不触发。如果我尝试通过执行以下操作使复选框可通过单击进行修改,它永远不会触发:
<DataGrid Grid.ColumnSpan="2" Grid.Row="1" Grid.Column="0" AutoGenerateColumns="True" ItemsSource="{Binding MasterDataTable, Mode=TwoWay}" CanUserAddRows="False" Margin="10 5" CurrentCellChanged="DataGrid_CurrentCellChanged">
<DataGrid.Resources>
<Style TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="IsEditing" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
</DataGrid>
当用户单击单元格内的复选框时,如何立即调用方法? 提前致谢。
最佳答案
1) 在您的 DataGrid 中注册 TargetUpdated 事件。
2) 指定一个 Column ,最好设置 AutoGenerateColumns=False 。
3) 在您的 Binding 标记中的 NotifyOnTargetUpdated 属性(您的目标是您的复选框)。
4) 在您的绑定(bind)中 UpdateSourceTrigger=PropertyChanged 和 Mode=TwoWay(不是 DataGrid 的默认行为)。
XAML:
<DataGrid TargetUpdated="DataGrid_TargetUpdated"
AutoGenerateColumns="False"
ItemsSource="{Binding SomeValues, Mode=OneWay}" CanUserAddRows="False" >
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding Path=., NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
在 CS 中:(您可能不想处理该事件。)
private void DataGrid_TargetUpdated(object sender, DataTransferEventArgs e)
{
// Do what ever...
}
关于wpf - DataGrid 通过单击 UpdateSourceTrigger = SourceUpdated 捕获单元格值更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20174094/