Use undoManager for virtualizedForceLayout

This might work for supporting undo/redo of property changes that have been saved in the model data via TwoWay Bindings:

      myDiagram.model.undoManager.skipsEvent = function(e) {
        if (e !== null && e.model === null) return true;
        return go.UndoManager.prototype.skipsEvent.call(this, e);
      };

      myDiagram.model.addChangedListener(function(e) {
        if (e.change === go.ChangedEvent.Transaction &&
            (e.propertyName === "FinishedUndo" || e.propertyName === "FinishedRedo")) {
          setTimeout(function() {
            myDiagram.commit(function(d) {
              d.updateAllTargetBindings();
            }, null);
          }, 1);
        }
      });

I hope this helps you.