我使用wpf数据网格编辑销售分录,如数量、折扣等。我对每个可编辑列使用DataTemplateColumn,并在每个列中使用文本框控件。每个文本框都绑定到DataTable的不同列。在编辑数量时,我必须计算净额并更新该列,这是通过更新绑定到网格的数据表来完成的。处理每个可编辑文本框的textchanged
、lostfocus
、gotfocus
等内部的所有内容。数据网格选择单元设置为"单元格"。
现在在使用这种方法时出现了很多问题。有时templatecolumn内的文本框的textchanged
事件会多次触发,这会导致所有计算都出错。
有人能说出使用datatemplate列编辑网格的最佳方法是什么吗?我必须使用文本框本身,因为我们有一个只支持文本框的数字键盘控件。为什么textchanged
事件会多次触发?即使我们垂直滚动网格,也会发生这种情况。
您可以在文本框上设置UpdateSourceTrigger=PropertyChanged,并使用RowEditEnding来确保用户实际完成了键入。
默认情况下,在编辑行失去焦点之前,DataGrid不会提交更改。此外,当创建TextBox控件并最初用文本填充时,TextChanged会激发。
我想当你滚动时,TextChanged会被触发,因为虚拟化正在启动,DataGrid正在回收行以显示新对象,而文本实际上在每个单元格上都在变化。