Thanks Peter,
I’m not sure why it appeared to be working before, but I did what you suggested and that took care of the problem. For anyone who finds this in the future, here is the fix I made to the source object:
var source = {
localdata: gridModel.items,
datatype: 'local',
updaterow: function(row, rowdata)
{
var observableArray = gridModel.items;
observableArray.replace(observableArray()[row], rowdata);
}
}