public virtual void Dock(IDockTile dockie, DockTileDirection dockDirection) { ISplitDockTile node = null; switch (dockDirection) { case DockTileDirection.Left: case DockTileDirection.Right: node = new HorizontalSplitViewModel(); break; case DockTileDirection.Top: case DockTileDirection.Bottom: node = new VerticalSplitViewModel(); break; } switch (dockDirection) { case DockTileDirection.Left: case DockTileDirection.Top: node.LeftNode = dockie; node.RightNode = this; break; case DockTileDirection.Right: case DockTileDirection.Bottom: node.LeftNode = this; node.RightNode = dockie; break; } Parent.ReplaceNode(this, node); //Place both parents DOH! this.Parent = node; dockie.Parent = node; }