public void ApplyDiff(object status, ObjectDiff diff) { if (diff.PropertyChanges != null) { ApplyPropertyChanges(diff.PropertyChanges, currentStatusAdaptor, status); } if (diff.SignalChanges != null) { ApplySignalChanges(diff.SignalChanges, currentStatusAdaptor, status); } if (diff.ChildChanges != null) { foreach (ChildDiff cdiff in diff.ChildChanges) { if (cdiff.Operation == DiffOperation.Update) { object statusChild = currentStatusAdaptor.FindChild(status, cdiff.Id); ApplyChildDiff(statusChild, cdiff.Diff); } else if (cdiff.Operation == DiffOperation.Remove) { // Remove the child currentStatusAdaptor.RemoveChild(status, cdiff.Id); } else { // Add the child at the correct position currentStatusAdaptor.AddChild(status, cdiff.AddContent, cdiff.InsertAfter); } } } }