O controlador e o ViewModel diferem de várias maneiras.
No MVC, o Controlador conhece a visualização, pode alterar a Visualização. Ele também conhece o Modelo e pode chamá-lo. No MVVM, um ViewModel é uma representação abstrata da View e não conhece a interface do usuário concreta; envolve o Model de uma maneira que possa ser exibida conforme desejado.
No MVC clássico, um controlador é apenas uma estratégia do View para interagir com o Model. De fato, às vezes um Controlador nem é necessário. No MVVM, você não precisa dele, pois pode ter diferentes modelos de exibição para a mesma exibição, se precisar de comportamentos diferentes. No MVC, você pode ter, por exemplo, um ReadOnlyController ou AdminController para se comunicar com o modelo. No MVVM, você pode ter apenas dois ViewModels e escolher o que precisa para o View.
Mas eles têm algumas semelhanças. Nos dois padrões, a Visão é um observador . No MVC clássico, a visualização é um observador do modelo, no MVVM é um observador do ViewModel.
Ambos os padrões destinam-se a separar as preocupações. O MVVM visa principalmente fornecer uma abstração do View, completamente independente da tecnologia da interface do usuário em uso. MVC não vai tão longe. Seu foco principal é a separação de preocupações, para que você não coloque a lógica de negócios (o Modelo) em exibição.
Você também pode achar útil esta resposta minha para uma pergunta semelhante.
Por fim, devo dizer que ambos os padrões pertencem à mesma família. MVP, do qual o MVVM é descendente, é irmão do MVC. Se você quiser saber mais, siga este link para o site de Martin Fowler , ele explica tudo em detalhes.