BlueG
It's funny... all these posts that mention console games and none that states the simplest truth: console games almost never use any keyboard input.
Still, XNA was meant for developing Windows games as well. To this end, my own disappointment was that they only support XBox controllers.
On the subject of pushing vs. pulling, though... the pulling method is really a lot more convenient for ordinary game control. If a key or button is down, then you do something, and if it isn't, then you don't. In a pull model, this can be done with a simple if statement. In a push model, you have to look for a down event, set a flag, check the flag where your action occurs, and then clear the flag when the up event occurs. That is the real reason consle style games tend to use a push model rather than a pull model. The pull model, as someone suggested, isn't that much faster. In fact, it can be slower depending on how its organized and used.
It's also much easier to reverse the pull model than it is to reverse the push model. And, for those cases where a mixed model is needed, creating your own event model will let us, the game developers, decide how to coordinate the two, rather than having it dictated by the framework. This is particularly relevant since, in games, you generally develop your own user interface system. On that last, many game engines include an interface system, but XNA is more of an API than a game engine. And that's not a bad thing; game engines are built on top of API's. Also, API's provide the foundation for a much broader range of games than a game engine will. Do we really want Microsoft producing an engine that, say, was only really good for creating first person shooters, arcade style games, or whatever else In any case, something such as an event model (for a push system) really belongs in that intermediate level of "engine" where we begin to determine how the system will really work.
Anyways, that's my two cents... 