2009-07-31 3 views
42

Я читал и слышал от нескольких людей, что WPF имеет довольно крутую кривую обучения (в зависимости от того, насколько вы осведомлены или опытны). Похоже, что большинство людей могут работать над демонстрационными или стартовыми проектами, а затем обнаруживать, что они застряли в течение многих периодов времени по разным проблемам. Мне интересно, что конкретно трудно понять или понять (слои, SDK, XAML, привязка данных и т. Д.), И если у вас есть какие-либо предложения о том, как избежать/облегчить некоторые из этих трудных тем?Насколько плохо изучаемая кривая WPF?

+0

Вы, возможно, указали на SO подкаст 61 w/Miguel? Великий эпизод ... –

+0

Нет, я didnt, больно, чтобы проверить это, спасибо! – SwDevMan81

ответ

35

WPF отличается; от этого не избежать.

Мой главный совет - не бойтесь XAML; Обнимите его, вот где сила!

Позвольте мне объяснить: -

Для меня, чтобы быть продуктивным, я предпочитаю писать XAML в текстовом виде, как я могу создать голой макет окна в несколько нажатий клавиш. Если вы регулярно вводите код, это очень быстрый способ разработки окон. Затем вы можете использовать визуальные редакторы, чтобы они выглядели красиво.

Если вы считаете, что каждый элемент XAML будет «этим объектом» и что каждый атрибут этого элемента XAML является свойством объекта, вы можете думать о XAML как создании объекта и назначении свойств. Очень похоже на написание кода.

Если вы проводите слишком много времени в визуальном дизайнере, тогда вы не сможете это оценить, а для некоторых это замедлит кривую обучения.

Недавний Hanselminutes Подкаст может вас заинтересовать.

Я также настоятельно рекомендую сначала изучить концепции Views и View-Models, даже если вы не подписаны на все, что является частью CompositeWPF, поскольку это действительно помогает.

+0

На самом деле CompositeWPF не подписывается на один шаблон графического интерфейса, например MVVM, MVP, MVC и т. Д. Кажется, я вспоминаю ссылочную реализацию с использованием MVP. MVVM просто кажется самым популярным для WPF. –

+2

+1 (и многое другое, если бы я мог) в интересах ввода XAML, а не проектирования сначала. XAML строит иерархии объектов. Объекты - это то, что вам нужно, чтобы научиться использовать WPF. Изучите это, и все остальное встанет на свои места. Отличный ответ. – Randolpho

2

От нескольких человек, с которыми мне приходилось работать, это должно было его изучить, они действительно рекомендуют пройти все учебные пособия из Expression Blend. Это дало им хороший опыт в WPF и лучший инструмент для использования при работе с ним.

2

Если у вас есть опыт работы с HTML или XML или аналогичными языками, это не исключительно сложно, особенно если у вас есть опыт веб-дизайна. Если вы выходите строго из фона WinForms, кривая обучения немного круче. В настоящее время я изучаю WPF, и, поскольку я исхожу из обширного фона веб-разработки, я не нахожу понятия, которые трудно освоить для большинства из них. Я нашел видеоролики онлайн в WindowsClient.net исключительно полезными, если немного плохо организованы.

+7

Я должен не согласиться с этим. Знание HTML и XML, безусловно, упрощает обучение XAML, но оно не имеет отношения к некоторым основным концепциям WPF, таким как привязка данных, модель команды, маршрутизируемые события, шаблоны управления и шаблоны данных, свойства зависимостей, раскадровки и т. Д. – jason

+2

@ Джейсон: Одна из основных трудностей WPF - это уровень презентации, и именно там помогает фон webdesign, IMO. –

8

Я играю с .NET более 4 лет, в основном Windows Forms приложений. Связывание не является чем-то неизвестным, и я стараюсь использовать хорошую практику во всех своих приложениях C#. В течение последних 1 месяца я изучал WPF для работы, и я должен признать, что это ОЧЕНЬ мощный, но намного сложнее добиться чего-то. Вы можете сделать намного больше и добиться отличных проектов с меньшими усилиями, но только после того, как знаете, как это работает, и это сложно, потому что оно огромно.

Подробнее, отладка сложнее - это делает обучение более медленным. Проблема, о которой я думаю, это IDE Visual Studio, которая мало помогает в XAML, и вы быстро пропускаете некоторые функции IntelliSense из C# при выполнении привязки или других вещей, которые теперь находятся в теге XML. Мне нравится, но да, кривая обучения негладкая.

+2

Это именно то, с чем мы сталкиваемся во время отладки. Мы не получаем каких-либо ошибок компиляции или времени выполнения, но все не так, как мы думаем, и более удручающее время от времени, мы не можем найти причину. Кроме того, если мы не знаем о проблемах, его сложно разместить огромное количество кода на форумах для получения решений. – Marshal

17

Существует хорошая статья от Карстена Januszewski называется Hitting the Curve: On WPF and Productivity вы можете найти интересные:

Давайте проясним: WPF поставляется с кривой. Я теперь смотрел, как группа разработчиков ударила по этой кривой. Кривая крутая. Мы говорим между от двух недель до двух месяцев кривой в зависимости от разработчика и уровень опыта/интуиции разработчик имеет. Будут моменты полной мистификации и много моменты освещения. Это сразу болезненным и приятным, если разработчик восхищается открытием глубоким и продуманным интерфейсом UI . Это сразу знакомо и иностранец. Есть много сходства с другими парадигмами разработки интерфейса: стили чувствуют себя как CSS, ну вроде. XAML код позади выглядит как ASP.NET, ну вид. 3D выглядит как DX или OpenGL, хорошо. Маршрутизированные события выглядят как . NET события, ну вроде. Зависимые свойства чувствуют себя как свойства, хорошо вид. Список может продолжаться. Но admidst этих (видов) знакомых метафоров существует так много пришельцев концепции, которые должны быть освоены: контроль templating, раскадровки, databinding сразу приходит на ум. Это не тривиальная кривая и не ожидать, чтобы быть продуктивным на 1 день или даже неделю 1 или даже месяц 1.

Это все стоит, хотя! ;)

+0

Из личного опыта я бы согласился с 2-недельным 2-месячным сроком. –

3

Это будет один из ответов «все зависит от», но все это действительно зависит от того, является ли вы тем разработчиком, который пытается постоянно совершенствовать свои навыки. Если это так, то в конечном итоге это сводится к нескольким вещам.

Купить WPF Unleashed (другие книги доступны, но я все-таки рекомендую этот), проработайте примеры и примерно через 2 месяца вы будете удивляться, как вы когда-либо делали это без него.

Это не наука о ракетах, и нет никаких концепций переключения парадигм. Фактически, если вы привыкли поддерживать хорошее разделение между своей логикой и презентацией, оно должно вставляться прямо.

Чтобы достичь уровня мастерства, вы, вероятно, смотрите между 6 и 12 месяцами игры с ним.

Удачи.

5

Это может быть довольно крутой.

Я потратил большую часть месяца на эксперименты с WPF и написал макет нашего текущего продукта в нем, не развивая интуицию для своей модели привязки данных или даже не выясняя, как Microsoft означает, что она будет использоваться. Мне потребовалось гораздо меньше времени, чтобы понять основы ASP.NET MVC.

[Наше приложение отображает/зависит от большого количества данных в реальном времени, и я использовал книгу Windows Presentation Foundation от Nathan. Возможно, другая книга была бы более подходящей.]

5

WPF легко, как только вы получите общее представление о том, как это работает - попробуйте «WPF - how and why». Самая большая проблема заключается в разработке, если она того стоит, и есть еще много приложений, которые будут прекрасно реализованы как Windows Forms плюс немного графики.

Я также согласился бы с более ранним комментарием о попадании в XAML - это просто немного более сложный HTML, и единственная реальная трудность - это выяснить, что делает. Что касается того, что вы застряли позже в проекте, разве вы не всегда застряли в проекте? Это когда вы начинаете пытаться сделать 1%, что сложно.

3

Да, это не простая прогулка - но не бойтесь. Дело в WPF, оно красиво спроектировано, поэтому вы получаете постоянную положительную эмоциональную обратную связь (по крайней мере, я); Вам нравится сидеть, играя с ним, и восклицать «WOW» каждые несколько минут;)

+1

«Постоянная положительная эмоциональная обратная связь». лол. – gonzobrains

+0

@ gonzobrains, что так смешно в этом? не соответствует действительности? –

10

Сложность обучения WPF - это не столько API, сколько модель. Это совсем другая ментальная модель, чем вы использовали бы с чем-то вроде Windows Forms.

Вместо того, чтобы писать методы, которые императивно заполняют элемент пользовательского интерфейса, вы обычно привязываете данные к свойствам объекта. Чтобы получить сложное поведение, вы обычно используете определенный уровень композиции.

В качестве примера, если у вас есть серия элементов, которые вы хотите в списке, с фрагментом текста, за которым следует изображение. В Windows Forms вы получите список и повторите его. Для каждого элемента в списке вы должны создать элемент управления для элемента, текст и добавить изображение, а затем добавить новый субконтрол в список. (Точная процедура может варьироваться в зависимости от типа элемента управления. Вы можете добавлять SubItems вместо простого управления и т. Д.).

WPF будет обрабатывать это совсем по-другому. В WPF на верхнем уровне вы объявите объект-контейнер и привяжите его к списку.

Затем вы должны предоставить этому контейнеру шаблон для отображения его элементов. Шаблон - это в основном другой элемент управления, который определяет расположение подэлементов, которые связаны с экземпляром класса, в который заполняется список.

В результате получается очень композиционное чувство и абсурдно мощно. Это также совсем другая модель, чем большинство разработчиков, и до тех пор, пока вы не сможете интернализировать модель, очень часто сталкиваются с проблемами, которые пытаются сделать так, как вы это делали в Windows Forms/etc.

Как только вы привыкнете к модели, вернитесь к другим API-интерфейсам. Не потому, что они внезапно трудны, а потому, что вы знаете, как легко все может быть.

8

Как вы могли бы сделать вывод из моей истории вопроса, я определенно считаю, что это крутая кривая обучения. Вы почти точно описываете мой опыт. Будучи студентом, работающим полный рабочий день (по математике и физике, а не по разработке программного обеспечения), который только программирует WPF для приложений для любителей, это было довольно неприятно. Я пробовал создавать новые приложения в WPF или переносить некоторые из моих старых приложений в WPF и всегда зацикливаться на какой-то маленькой вещице, которая кажется необычайно трудной. Одна вещь, которую я не делал - в основном из-за времени - садится с, например, книгу или серию учебных пособий и проделывать их шаг за шагом. Если вы профессиональный разработчик, это может быть гораздо более выполнимым и может сделать WPF намного проще для вас.

Самая большая вещь, которая, как мне кажется, вызывает проблемы, касается моей парадигмы Model-View-ViewModel (см., Например, this question of mine).В то время как в WinForms я мог просто перетащить некоторые вещи на форму, испортить ее свойства и связать некоторые события в коде, теперь я должен подумать о разделении вещей на представление, модель и viewmodel. Многие из этих событий codebehind становятся правилами проверки или привязкой данных. Вероятно, это не помогает, что ни одно из моих приложений не является «приложениями для обработки данных»; то есть они не манипулируют базой данных клиентской информации или чего-либо еще, где многое из этого имеет смысл. Вместо этого это больше похоже на «Я хочу, чтобы текстовое поле вводилось пользователем в URI, и я хочу, чтобы кнопка« Скачать »включалась только в том случае, если это текстовое поле содержит допустимый URI». Такие вещи начинаются очень сложно; Мне нужно подумать о том, где URI подходит для моей модели, где она подходит в моей модели просмотра, подключить структуру проверки и свойства привязки кнопки и текстового поля ко всем этим элементам.

Еще одна неприятная проблема заключается в том, сколько вещей просто отсутствует в каркасе. Например, sorting listviews.

В конце концов WPF, в конце концов, имеет много преимуществ. The layout framework seems a lot nicer than the primarily pixel-based WinForms model. Он использует современные шрифты, такие как Segoe UI, heh: P. И его функции компоновки также довольно удивительны, например. как естественно накладывать изображение на кнопку (просто поместите тег XAML изображения внутри кнопки XAML-тега, по существу); Я подозреваю, что он может решить и my problem regarding checkboxes with controls inside of them, хотя я еще не пытался это сделать.

+4

Лучший способ преодолеть переключатель model/view/viewmodel - это подумать о терминах «какие данные я хочу представить?» Создайте класс, который предоставляет данные, у вас есть viewmodel. В WPF вы почти всегда лучше разбираетесь в «представлении данных», а не «заселяете элементы управления». – kyoryu

Смежные вопросы