Что касается # 3, многие люди будут использовать аргумент «еще один уровень косвенности», говоря, что изменения в модели не повлияют на представление. Хотя это технически правильно, это не настоящая причина делать что-то подобное.
Если вы рассматриваете Модель как объекты, к которым вы возвращаетесь, скажем, из уровня доступа к данным или службы (что обычно и считается), вы начинаете понимать, зачем вам ViewModel. Модель ViewModel предназначена для расширения модели поведениями, которые необходимы представлению .
Например. Если вы хотите иметь возможность изменять свойство и получать представление, уведомляющее об этом изменении посредством привязки, свойство должно вызывать некоторую форму NotifyPropertyChanged, чтобы представление могло реагировать. Это поведение, которого не будет у вашей типичной модели.
В другом примере, скажем, у вас есть коллекция, и вы хотите пометить каждый элемент в коллекции логическим значением, когда пользователь нажимает галочку рядом с этим элементом в представлении. Возможно, вам понадобится свойство IsSelected. Такое поведение Модель не должна предоставлять.
Как бы то ни было, я вижу, откуда вы идете ... Сначала у меня определенно возникла проблема с этим. Когда я в первый раз скопировал и вставил содержимое модели в свою модель представления, у меня перехватило дыхание, но вам просто нужно смириться с тем фактом, что для того, чтобы ваш View работал, ему понадобится дополнительное поведение, которое Модель не должна делать. не предоставить.
Независимо от того, насколько это НЕ СУХО, форсировать типы WCF или LINQ to SQL (или любой другой любимый ORM) для реализации INotifyProperyChanged хуже.