По сути, ViewModel - это оболочка модели. Теперь это может быть не очень полезно :-) Думайте о модели как о данных, с которыми работает ваше приложение, скажем, человек. Теперь у человека есть день рождения, и вы можете захотеть иметь форму для ввода дня рождения этого человека. Предположим, что мы просто используем простой TextBox, дата показывает что-то вроде 01-02-2009 12:00:00 AM. Начнем с того, что нам не нужна часть времени, и, возможно, нам не понравится часть 01-02-2009, поскольку это зависит от настроек вашего региона.
Так вот, ViewModel приходит им. Он оборачивает класс Person и выставляет дату в виде трех целочисленных значений: год, месяц и день. В наборе свойств он пытается построить дату из различных значений и отображает любые ошибки, которые могут возникнуть.
Проще говоря, ViewModel - это обертка Model, специально ориентированная на определенный вид (дисплей). Это устраняет большинство IValueConvertors одновременно.
У Джоша Смита есть хорошее объяснение здесь: http://joshsmithonwpf.wordpress.com/2008/11/14/using-a-viewmodel-to-provide-meaningful-validation-error-messages и большая дискуссия здесь: http://groups.google.com/group/wpf-disciples/browse_thread/thread/3fe270cd107f184f?pli=1