I am new to the WPF ,and i use it to build a point of sale system.
I have a DataGrid
control in the main window bound to an ObservableCollection
of Item
, the cashier will enter/scan the items to be sold the default quantity for each item is 1 but it is available for the cashier to change the quantity manually.
Whenever I change the quantity, it should update the total price with the sum of the items' prices when I leave the cell to another cell on the row, but it doesn't happen, the source is updated only when I go to another row not another cell in the same row.
Is there anyway to force the DataGrid
to update the source when the cell is changed rather than the row?
Apply the
UpdateSourceTrigger=LostFocus
to each binding. It worked like a charm for me.The code in the accepted answer didn't work for me since the row fetched from
ItemContainerGenerator.ContainerFromItem(item)
results in null and the loop be quite slow.A more simple solution to the question is the code provided here: http://codefluff.blogspot.de/2010/05/commiting-bound-cell-changes.html
Almund is right.
UpdateSourceTrigger=LostFocus
will work best in you case. And as you have mentioned that your source is updating when you move to next row, that means I guess, you are usingObservableCollection<T>
to bind yourDataGrid
'sItemSource
. Because that is what which you need to achieve what you want.You need to add
"UpdateSourceTrigger=LostFocus"
to each of your columns.Yes, this is possible. Your question is basically the same as DataGrid - change edit behaviour
The code below is mostly from Quartermeister's answer but I added a
DependencyProperty
BoundCellLevel that you can set when you need aDataGrid
binding to be updated when the current cell changes.