MVVM es posible en .NET 4.5 con enlace de modelo y el uso de controles enlazados con plantilla como FormView.
Aquí está la técnica que uso:
Diseño ViewModels para cada UserControl y UserControl anidado y luego uso un FormView que siempre está en EditMode, donde incluyo los controles que se unen a las propiedades del modelo mediante expresiones de enlace.
Configuré SelectMethod y UpdateMethod de FormView. El primero devuelve el ViewModel y el segundo llama a TryUpdate () en él. En las devoluciones, siempre llamo al método de actualización de FormView en Preload o Load. De esa manera, ViewModel siempre está actualizado desde la vista.
Ejecuto la lógica dentro del ViewModel y en PreRender vuelvo a vincular la vista para aplicar cualquier cambio. La clave de este método es inyectar el ViewModel en la vista (UserControl) fuera de la vista (por ejemplo, en el nivel de página) y, por supuesto, asegurarse de que sea serializable y almacenado en caché en ViewState o en cualquier otro lugar que elija.
Finalmente, deshabilito el ViewState en todos los controles, ya que están controlados por el ViewModel con estado en caché y no necesitan su propio estado.
Esta técnica nunca me falló hasta ahora y solo desearía poder encontrar una solución para el comando / enlace de botones también, como WPF.