The thing that gets OnSaveChanges called is if CurrentCell.IsModified is true. And calling CurrentCell.NotifyChanged is what is supposed to set CurrentCell.IsModified = true. But calling CurrentCell.NotifyChanged does not directly trigger a call to OnSaveChanges. In standard cells, like a textBox cell, NotifiedChanged is raised everytime you press a key for example, but OnSaveChanges is called when the user leaves the textBox (if IsModified is true). CurrentCell.ConfirmChanges is what actually triggers the call to OnSaveChanges. ConfirmChanges is called after things like CurrentcellValidating is raised.
In your case, the reason OnSaveChanges is not call as with the standard cell controls is that NotifyCurrentCellChanged(); is not setting CurrentCell.isModified = true when you call it as you leave teh cell. Here is the code.
public void NotifyChanged()
{
TraceUtil.TraceCurrentMethodInfoIf(Switches.CurrentCell.TraceVerbose, grid.PaneDesc);
if (!IsInActiveOrDeactivate)
{
IsModified = true;
Grid.RaiseCurrentCellChanged();
}
}
Your change event that calls NotifyCurrentCellChanged() does not get raised on every keystroke, and but instead is only being raised as you are leaving the cell, and this is why IsModified was not being set properly in your case.
Because of this, I think you will have to either change things so your change event is raised on each keystroke (so things get set before you try to leave the cell), or try to tweak the above suggested code to work around the problems you have found.
If you can upload a little sample showing exactly what you want to handle, maybe we can tweak it to get things working.