Я читал и слышал от нескольких людей, что WPF имеет довольно крутую кривую обучения (в зависимости от того, насколько вы осведомлены или опытны). Похоже, что большинство людей могут работать над демонстрационными или стартовыми проектами, а затем обнаруживать, что они застряли в течение многих периодов времени по разным проблемам. Мне любопытно, что конкретно трудно понять или понять (слои, SDK, XAML, привязка данных и т.д.), И если у вас есть какие-либо предложения о том, как избежать/облегчить некоторые из этих трудных тем?
Насколько плоха кривая обучения WPF?
Ответ 1
WPF отличается; от этого не избежать.
Мой главный совет - не бойтесь XAML; Обнимите его, вот где сила!
Позвольте мне объяснить: -
Для меня продуктивность, я предпочитаю писать XAML в текстовом представлении, так как я могу создать голый макет окна несколькими нажатиями клавиш. Если вы регулярно вводите код, это очень быстрый способ разработки окон. Затем вы можете использовать визуальные редакторы, чтобы они выглядели красиво.
Если вы помните, что каждый элемент XAML будет "new
" этого объекта и что каждый атрибут этого элемента XAML является свойством объекта, вы можете думать о XAML как создании объекта и назначении свойств, Очень похоже на написание кода.
Если вы проводите слишком много времени в визуальном дизайнере, вы не сможете это оценить, а для некоторых это замедлит кривую обучения.
Недавний Hanselminutes подкаст может вас заинтересовать.
Я также настоятельно рекомендую сначала изучить концепции Views и View-Models, даже если вы не подписаны на все, что является частью CompositeWPF как это действительно помогает.
Ответ 2
Есть хорошая статья от Карстена Янушевского под названием "Нажатие кривой: на WPF и производительность" , которые могут показаться вам интересными:
Пусть будет ясно: WPF поставляется с кривая. Я теперь смотрел кучу разработчики ударили по этой кривой. И кривая крутая. Мы говорим между от двух недель до двух месяцев кривой в зависимости от разработчика и уровень опыта/интуиции разработчик имеет. Будут моменты полной мистификации и большого количества моменты освещения. Это сразу болезненным и приятным, если Девелопер прелести в открытии глубокий и продуманный интерфейс Платформа. Это сразу знакомо и инопланетянин. Есть много общего с другие парадигмы развития пользовательского интерфейса: стили чувствую себя как CSS, ну вроде. XAML код позади чувствует себя как ASP.NET, хорошо вроде. 3D выглядит как DX или OpenGL, хорошо вид. Маршрутизированные события События .NET, ну вроде. зависимый свойства чувствуют себя как свойства, хорошо вроде. Список может продолжаться. Но признавать эти (вроде) знакомые метафор есть так много чуждых концепции, которые должны быть освоены: шаблоны управления, раскадровки, привязка данных приходит на ум сразу. Это не тривиальная кривая и не рассчитывайте на продуктивность на 1-й день или даже неделю 1 или даже месяц 1.
Все это стоит того!;)
Ответ 3
Трудность обучения WPF - это не столько API, сколько модель. Это совсем другая ментальная модель, чем вы использовали бы с чем-то вроде Windows Forms.
Вместо того, чтобы писать методы, которые императивно заполняют элемент пользовательского интерфейса, вы обычно привязываете данные к свойствам объекта. Чтобы получить сложное поведение, вы обычно используете некоторый уровень композиции.
В качестве примера, если у вас есть серия элементов, которые вы хотите в списке, с фрагментом текста, за которым следует изображение. В Windows Forms вы получите список и повторите его. Для каждого элемента в списке вы должны создать элемент управления для элемента, текст и добавить изображение, а затем добавить новый субконтрол в список. (Точная процедура может варьироваться в зависимости от типа элемента управления. Вы можете добавлять SubItems вместо простого управления и т.д.).
WPF будет обрабатывать это совсем по-другому. В WPF на верхнем уровне вы объявите объект-контейнер и привяжите его к списку.
Затем вы предоставите этому контейнеру шаблон, который будет использоваться для отображения его элементов. Шаблон - это в основном другой элемент управления, который определяет расположение подэлементов, которые связаны с экземпляром класса, в который заполняется список.
Он заканчивается очень композиционным чувством и абсурдно силен. Это также совсем другая модель, чем большинство разработчиков, и до тех пор, пока вы не сможете интернализировать модель, она очень распространена, чтобы столкнуться с проблемами, которые пытаются сделать так, как в Windows Forms/etc.
Как только вы привыкнете к модели, вернемся к другим API-интерфейсам. Не потому, что они внезапно становятся трудными, а потому, что вы знаете, как легко могут быть.
Ответ 4
Я играю с .NET более 4 лет, в основном приложения Windows Forms. Связывание не является чем-то неизвестным, и я стараюсь использовать хорошую практику во всех своих приложениях С#. В течение последних 1 месяца я изучал WPF для работы, и я должен признать, что он ОЧЕНЬ мощный, но намного сложнее добиться чего-то. Вы можете сделать намного больше и добиться отличных проектов с меньшими усилиями, но только после того, как знаете, как это работает, и это сложно, потому что оно огромно.
Больше, отладка сложнее - это делает обучение более медленным. Проблема, о которой я думаю, это IDE Visual Studio, которая мало помогает в XAML, и вы быстро пропускаете некоторые функции IntelliSense в С# при выполнении привязки или других вещей, которые теперь находятся в теге XML. Мне нравится, но да, кривая обучения не является гладкой.
Ответ 5
Как вы могли бы сделать вывод из моей истории вопроса, я определенно считаю, что это крутая кривая обучения. Вы почти точно описываете мой опыт. Будучи студентом, работающим полный рабочий день (по математике и физике, а не по разработке программного обеспечения), который только программирует WPF для приложений для любителей, это было довольно неприятно. Я пробовал создавать новые приложения в WPF или переносить некоторые из моих старых приложений в WPF и всегда зацикливаться на какой-то маленькой вещице, которая кажется необычайно трудной. Одна вещь, которую я не делал - в основном из-за времени - садится с, например, книгу или серию учебных пособий и проделывать их шаг за шагом. Если вы профессиональный разработчик, это может быть гораздо более выполнимым и может сделать WPF намного проще для вас.
Самая большая проблема, которая, как мне кажется, вызывает проблемы, касается моей парадигмы Model-View-ViewModel (см., например, этот мой вопрос). В то время как в WinForms я мог просто перетащить некоторые вещи на форму, испортить ее свойства и связать некоторые события в коде, теперь я должен подумать о разделении вещей на представление, модель и viewmodel. Многие из этих событий codebehind становятся правилами проверки или привязкой данных. Вероятно, это не помогает, что ни одно из моих приложений не является "приложениями для обработки данных"; то есть они не манипулируют базой данных клиентской информации или чего-либо еще, где многое из этого имеет смысл. Вместо этого это больше похоже на "Я хочу, чтобы текстовое поле вводилось пользователем в URI, и я хочу, чтобы кнопка" Download "была включена, только если это текстовое поле содержит допустимый URI". Такие вещи начинаются очень сложно; Мне нужно подумать о том, где URI подходит для моей модели, где она подходит в моей модели просмотра, подключить структуру проверки и свойства привязки кнопки и текстового поля ко всем этим элементам.
Еще одна неприятная проблема заключается в том, сколько вещей просто отсутствует в структуре. Например, сортировка списков просмотров.
В конце концов, WPF имеет много преимуществ. Структура макета кажется намного приятнее, чем модель WinForms, основанная на пикселях. Она использует современные шрифты, такие как Segoe UI, heh: P. И его функции компоновки также довольно удивительны, например. как естественно накладывать изображение на кнопку (просто поместите тег XAML изображения внутри кнопки XAML-тега, по существу); Я подозреваю, что он может решить мою проблему с флажками с элементами управления внутри них, хотя я еще не пытался это сделать.
Ответ 6
Он может быть довольно крутым.
Я потратил большую часть месяца на эксперименты с WPF и написал макет нашего текущего продукта в нем, не развивая интуицию для своей модели привязки данных или даже не выясняя, как Microsoft означает, что она будет использоваться. Мне потребовалось гораздо меньше времени, чтобы понять основы ASP.NET MVC.
[Наше приложение отображает/зависит от большого количества данных в реальном времени, и я использовал книгу Windows Presentation Foundation от Nathan. Возможно, другая книга была бы более подходящей.]
Ответ 7
WPF легко, как только вы получите общее представление о том, как это работает - попробуйте WPF - как и почему. Самая большая проблема заключается в разработке, если она того стоит, и есть еще много приложений, которые будут прекрасно реализованы как Windows Forms плюс немного графики.
Я также согласился бы с более ранним комментарием о том, чтобы попасть в XAML - это просто немного более сложный HTML, и единственная реальная трудность - это выяснить, что делает. Что касается того, что вы застряли позже в проекте, разве вы не всегда застряли в проекте? Это когда вы начинаете пытаться сделать 1%, что сложно.
Ответ 8
Это будет один из ответов "зависит от", но все, что он действительно, зависит от того, является ли вы тем разработчиком, который пытается постоянно совершенствовать свои навыки. Если это случай, тогда это сводится к нескольким вещам в конечном счете.
Купите WPF Unleashed (доступны другие книги, но я все-таки рекомендую этот), проработайте примеры и примерно через 2 месяца или так вы будете удивляться, как вы когда-либо делали без него.
Это не ракетная наука, и нет никаких парадигм, меняющих концепции. На самом деле, если вы привыкли поддерживать хорошее разделение между своей логикой и презентацией, оно должно вставляться прямо.
Чтобы достичь уровня мастерства, вы, вероятно, смотрите между 6 и 12 месяцами игры с ним.
Удачи.
Ответ 9
Да, это не легкая прогулка - но не бойтесь. Дело в WPF, оно красиво спроектировано, поэтому вы получаете постоянную положительную эмоциональную обратную связь (по крайней мере, я); Вам нравится сидеть с ним и восклицать "WOW" каждые несколько минут;)
Ответ 10
От нескольких людей, с которыми я работал, чтобы это узнать, они действительно рекомендуют пройти все учебные пособия из Expression Blend. Это дало им хороший опыт в WPF и лучший инструмент для использования при работе с ним.
Ответ 11
Если у вас есть опыт работы с HTML или XML или аналогичными языками, это не исключительно сложно, особенно если у вас есть опыт веб-дизайна. Если вы выходите строго из фона WinForms, кривая обучения немного круче. В настоящее время я изучаю WPF, и, поскольку я исхожу из обширного фона веб-разработки, я не нахожу понятия, которые трудно освоить для большинства из них. Я нашел видеоролики онлайн-видео в WindowsClient.net исключительно полезными, если немного плохо организованы.