O MVVM é possível no .NET 4.5 com ligação de modelo e o uso de controles de modelo vinculados, como o FormView.
Aqui está a técnica que eu uso:
Projecto ViewModels para cada UserControl e UserControl aninhado e, em seguida, uso um FormView que está sempre em EditMode, onde incluo os controles que se ligam às propriedades do modelo usando expressões de Ligação.
Defino o SelectMethod e UpdateMethod do FormView. A primeira retorna o ViewModel e a segunda chama TryUpdate (). Nas postbacks, eu sempre chamo o método Update do FormView em Pré-carregamento ou Carregamento. Dessa forma, o ViewModel está sempre atualizado a partir da visualização.
Eu executo a lógica dentro do ViewModel e no PreRender eu religo a visualização para aplicar quaisquer alterações. A chave neste método é injetar o ViewModel na visualização (UserControl) fora da visualização (por exemplo, no nível da página) e, é claro, garantir que seja serializável e armazenado em cache no ViewState ou em qualquer outro local que eu escolher.
Por fim, desabilito o ViewState em todos os controles, pois eles são "dirigidos" finalmente pelo ViewModel com armazenamento em cache e não precisam de seu próprio estado.
Essa técnica nunca me falhou até agora e eu só gostaria de encontrar uma solução para a ligação de comandos / botões também, como o WPF.