【发布时间】:2013-11-24 11:47:22
【问题描述】:
我正在努力使用 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>
如何在用户单击单元格内的复选框后立即调用方法? 提前致谢。
【问题讨论】:
-
您有单元格编辑模板或 DataGridColumn 要发布吗?我认为问题在于将其与单元格绑定值上的 UpdateSourceTrigger=PropertyChange 绑定。
-
我希望我有,不幸的是我自动生成列。项目源绑定到 DataView 对象。
-
好的,所以您首先需要的是不要自动生成您想要的列,这不是必须自定义的 DataGrid 的“特殊”行为,这是一种特殊行为,因为 DataGrid 的默认行为是更新绑定LostFocus 上的值,而不是常见的 PropertyChanged 设置。
-
好的,我试试看。在不丢失使用 CellEditingFinished 事件的可能性的情况下单击单元格更改复选框值怎么样?
-
既然你提到了它,我不相信 CellEditingFinished 会在失去焦点之前触发,你试图基于什么?为什么失去焦点对这件事不利?