Increases the “Blendability” of your views (ability to use Expression BLEND to design views) – This ENABLES a separation of responsibilities on teams that are lucky enough to have a designer and a programmer… each can work independent of the other.
“Lookless” view logic – Views are AGNOSTIC from the code that runs behind them, enabling the same view logic to be reused across MULTIPLE views or have a view easily retooled or replaced. Seperates concerns between “behavior” and “style”.
No duplicated code to update views – In code-behind you will see a lot of calls to update view controls. With MVVM you can be assured the view is updated APPROPRIATELY just by setting the underlying property and all view side-effects thereof.
Testability – Since your logic is completely agnostic of your view, unit testing is made easy. You can test the behavior of a ViewModel without involving its view. This also enabled test-driven development of view behavior, which is almost impossible using code-behind.
Designer-Developer Workflow – MVVM facilitates a separation of UI and presentation logic concerns from the business layer that makes it easy to streamline the development process by allowing design cycles to happen in parallel with development.