Как стать профессиональным разработчиком WPF?
===============================================

 Привет.  
  

Разрабатывал всю жизнь ASP.NET MVC-приложения, и то только back-end часть. Знания по стандартному HTML/CSS очень низкие — не смогу красиво сверстать все. Решил уйти в десктоп-разработку. Поэтому и задаю вопрос.  
  

Решил изучать WPF, XAML. Потом внезапно открыл, что WPF без MVVM — существовать не может. А у MVVM нет общих правил, каждый реализовывает его по-разному. И действительно хороших, многофункциональных и понятных проектов на WPF + MVVM я не видел. Ситуацию усугубляют еще MVVM-фреймворки, всякие там Prism (вроде как большой монстр) и так далее. И у меня диссонанс — что сначала изучать, куда копать, что вообще делать, что стоит изучать, а что нет. Было бы отлично, если бы дали материалы/советы/примеры и примерное приложение (задание) с богатым функционалом (в плане WPF), которое надо реализовать.  
  

Уважаемые разработчики, у которых большой опыт разработки WPF/MVVM, пожалуйста, поделитесь материалами и советом, как быстро "воткнуться" в это дело. Как разгрести эту кучу информации и отобрать только то, что нужно и правильно, а именно:  
1. С чего начать изучение WPF?
2. Какие материалы нужны для этого? (Желательно сразу ссылку/название)
3. Где и что надо/можно узнать про MVVM, простенький, без хлама?
4. Где достать проекты на WPF, сделанные в рамках MVVM, которые обладают богатым функционалом и показывают как правильно это делается?
5. Нужны ли MVVM-фреймворки? Почему столько дискуссии возникает. Одни говорят да, другие — нет.
6. И нужен ли Blend вообще? Без него вообще не обойтись или можно прожить?

 

> А у MVVM нет общих правил, каждый реализовывает его по-разному.

  

Ну я б не говорил, что их прям нет. Есть привязки, есть INotifyPropertyChanged, есть рекомендации от MS. Да, вы правы в том смысле, что WPF это библиотека, но НЕ фреймворк для разработки, т.е. она не регламентирует структуру приложения.  
  

> И у меня диссонанс — что сначала изучать, куда копать, что вообще делать, что стоит изучать, а что нет.

  

Вот [пару дней назад](https://toster.ru/q/354682#answer_885042) советовал книгу: [Raffaele Garofalo, "Building Enterprise Applicatio...](http://www.oreilly.com/pub/pr/2761) - если ничего не читали еще, начните с неё.  
  

> И действительно хороших, многофункциональных и понятных проектов на WPF + MVVM я не видел.

  

Неудивительно: WPF-приложения это обычно line-of-business, а это не open-source по определению.  
  

> С чего начать изучение WPF? 

  

Убедитесь, что более-менее понимаете платформу .NET и ООП в ней, иначе будет тяжело.  

Вам надо будет разобраться:  

а) с системой зависимых свойств (dependency property);  

б) c MVVM и INotifyPropertyChanged;  

в) само собой с XAML и контролами, принципами написания своих контролов;  

г) со стилями и стилизацией;  

д) с системой команд (ICommand) и прочим.  
  

> Нужны ли MVVM-фреймворки? Почему столько дискуссии возникает. Одни говорят да, другие — нет.

  

Дискуссии возникают потому что а) некоторые вещи можно сделать разными способами; б) разработчики имеют дело с приложениями разного размера и сложности, но редко об этом задумываются в спорах; в) опытные разработчики нередко сами себя уже обеспечили нужным "библиотечным" пока разрабатывали приложения (ViewModelBase, хах :) ). Лучше пока разберитесь сами как что работает, потом поймете, какой фреймворк вам пригодится.  
  

Впоследствии еще советую познакомиться с IoC-контейнерами, если еще не пользовались. Это общий совет для крупных приложений, не только для WPF. Некоторые имеют спецальные интеграционные библиотеки для работы на пару с фреймворками, например [Autofac](https://www.nuget.org/packages/Autofac/): [Prism.Autofac](https://www.nuget.org/packages/Prism.Autofac/). 

 1. Начните с чтения книги и понимания основ: routed events, data binding, comands, styles & triggers. На метаните есть раздел по [WPF](http://metanit.com/sharp/wpf)  

2. Книги, статьи  

3. Например вот здесь [пример](http://heiswayi.github.io/developing-wpf-application-using-mvvm-design-pattern.html) простого MVVM  

4. Искать на codeproject, github  

5. Я бы посоветовал посмотреть в сторону [caliburn micro](http://caliburnmicro.com). Посмотрите исходники проекта.  

6. В моем понимании делать интерфейс на Blend, это все равно, что верстать страницу на FrontPage. Лично мне он не по нраву. 

 Не буду отвечать развёрнуто, уже ответили нормально.  

5. Единственное на что можно на старте посмотреть, это MVVM Light, он упростит рутину, но при этом оставит стандартную архитектуру. Prism на старте вообще брать нельзя, мозг сломаться может, да и при этом позволяет реализовать только типовые проекты, опять же с кучей магии. Catel тоже монстр, он мне куда больше нравится, чем Prism, более гибкий. Caliburn Micro главное зло MVVM, для мелких проектов может и подойдет, но большие проекты с ним поддерживать очень сложно будет, ибо нет явных связей, всё построено на магии внутренней реализации.  
  

С Prism и Catel познакомиться надо обязательно, но не сразу. Caliburn Micro лучше даже не трогать, не засорять мозг. 

 Привет,  
  

1. MSDN + [professorweb.ru](http://professorweb.ru/) (хороший ресурс для начинающих)  

2. Онлайн ресурсы и настольный справочник можно, например (<https://www.ozon.ru/context/detail/id/7589270/)>  

3. Классика жанра: <https://msdn.microsoft.com/ru-ru/magazine/dd419663.aspx>  

4. С наскоку в голову не приходит, посмотри [https://github.com/MarkWithall/worlds-simplest-csh...](https://github.com/MarkWithall/worlds-simplest-csharp-wpf-mvvm-example/tree/master/MinimalMVVM)  

5. Пользоваться или нет, поймешь после того, как погрузишся в тему  

6. На данном этапе он не нужен. В дальнейшем все будет зависеть от тебя. 

 Тоже изучаю WPF на данный момент. Пол года назад считал технологию полумертвой, пока не узнал о том, что Microsoft купила Xamarin. Перспектива разработки multi-platform приложений на "родном" языке, взорвала мне мозг и сильно мотивировала, наконец, приступить к изучению. Как коллеги уже упомянули, WPF востребован только в enterprise. Работая в стартапе начинаю понимать будущую ценность моих знаний WPF. Планируется внутрикорпоративная разработка desktop приложения.  

На данный момент еще не все составляющие WPF постигнуты мной. Учусь по курсам ITVDN. Все поверхностно, но для начального понимая компонентов WPF очень даже норм имхо. 

 Рекомендую беплатную книжку от SyncFusion [WPF Succinctly](https://www.dropbox.com/s/sfic5rwun3r2fax/WPF_Succinctly.pdf?dl=0). Так же ее можно бесплатно скачать с их официального сайта, но необходимо зарегестрироваться.  
  

Как показал мой опыт, использование Prism - из пушки по воробьям. Даже в больших проектах обходился своими асбтракциями, согласен с предыдущими комментариями, очень рекомендую Autofac. Пример использования его с MVVM описывал [тут](http://www.ryzhov-alexandr.net/2015/09/08/%D0%BD%D0%B0-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C-mvvm-%D0%BF%D1%80%D0%B8%D1%85%D0%BE%D0%B4%D0%B8%D1%82-autofac/).  
  

Главное все зависимости инъектить через конструктор, и ViewModel во View, и Autofac будет делать все остальное за вас.