Existem frameworks que auxiliam na implementação do padrão MVVM, como o Prism e o MVVM Light. Nesta aplicação não fiz uso de nenhum dos dois, mas recomendo seu estudo e uso para projetos maiores.
Dica: em projetos com o padrão MVVM eu costumo reutilizar três classes que encontrei na comunidade, são elas:
– DelegateCommand: classe própria para associação de propriedades do tipo ICommand com suas implementações concretas, e que pode ser vista neste post: Simplified MVVM Commanding with DelegateCommand