I am currently working on a Level Editor for XNA which is built by combining Windows Forms and XNA. I am using stuff from the example on App Hub link text, but I have made some
Not sure what a ViewportController might be. However, the Draw() method is triggered by a Windows paint request. That runs the Control.OnPaint() method, there is an override for it in the GraphicsDeviceControl class which causes Draw() to run.
The sample SpinningTriangleControl shows how you'd get a control to redraw itself repeatedly, what you'd need to get it animated:
// Hook the idle event to constantly redraw our animation.
Application.Idle += delegate { Invalidate(); };
Note the Control.Invalidate() method call, that's what eventually causes the OnPaint() method to run. Using the Idle event ensures this is done over and over again but only if the main thread isn't otherwise busy with anything. This isn't necessary for controls that show only static content, like the sample SpriteFontControl. Another way to do it is to use a Timer with a short Interval, its Tick event handler can call Invalidate().