When I do training for developers, I like to build the demo's live, meaning I start from an empty project and build the demo live. This has the advantage that the trainees see the demo being built alive, they can follow along and build the demo themselves, and if I make a mistake they learn even more, because you learn a lot fixing an error.
The only disadvantage this way of training has, is that it takes more time. I do think this way of training is superior to just showing the demo with the code, because you get less insight in how to build the actual thing. What do you think?
On the subject of labs, I like to give labs that tell you what to build, and might give some hints, but that's all. This way you have to think your way through building the lab. Many MOC (Microsoft Official Curriculum) labs don't do this, they give labs that tell you step by step what to type, what to click, etc... I call these "Monkey" labs, because you could actually sleep during the session and still make the lab without even understanding what you're doing or why.
These last couple of weeks giving Vista training again confirmed my conviction of doing training this way, because some people told me they don't like the "Monkey" labs that came with this training (although they actually do illustrate the concepts very well). They wanted to do more of the hands-on building of samples.