2009-07-31 9 views
42

Ich habe gelesen und gehört von mehreren Leuten, dass WPF eine ziemlich steile Lernkurve hat (abhängig davon, wie erfahren oder erfahren Sie sind). Scheint so, als ob die meisten Leute die Demo oder Starter-Projekte zum Laufen bringen können und dann für längere Zeit bei verschiedenen Problemen stecken bleiben. Ich bin neugierig, was speziell schwierig zu lernen oder zu verstehen ist (Ebenen, SDK, XAML, Datenbindung, etc.) und wenn Sie irgendwelche Vorschläge haben, wie man einige dieser schwierigen Themen vermeiden/lindern kann?Wie schlimm ist die WPF-Lernkurve?

+0

Haben Sie vielleicht zu SO Podcast 61 w/Miguel aufgeführt? Große Episode ... –

+0

Nein, ich habe nicht, ich muss es überprüfen, danke! – SwDevMan81

Antwort

35

WPF ist anders; davon kommt man nicht weg.

Mein wichtigster Rat ist, keine Angst vor XAML zu haben; Umfassen Sie es, das ist, wo die Macht ist!

Lassen Sie mich erklären: -

Für mich produktiv zu sein, ziehe ich XAML in der Textansicht zu schreiben, wie ich das blanke Layout des Fensters in wenigen Tastendrücken schaffen. Wenn Sie regelmäßig Code eingeben, ist dies ein sehr schneller Weg, um Windows zu entwickeln. Sie können dann die visuellen Editoren verwenden, um es hübsch aussehen zu lassen. Wenn Sie daran denken, dass jedes Element des XAML "new" dieses Objekt ist und dass jedes Attribut dieses XAML-Elements eine Eigenschaft des Objekts ist, können Sie sich XAML als Objekt-Erstellung und Zuweisung von Eigenschaften vorstellen. Sehr ähnlich zum Schreiben von Code.

Wenn Sie zu viel Zeit im visuellen Designer verbringen, dann werden Sie dies nicht zu schätzen wissen, und für einige wird dies die Lernkurve verlangsamen.

Ein aktueller Hanselminutes Podcast könnte Sie interessieren.

Ich rate auch stark zu früh lernen die Konzepte von Ansichten und View-Models, auch wenn Sie nicht alle, die Teil von CompositeWPF ist abonnieren, da dies wirklich hilft.

+0

Eigentlich CompositeWPF abonniert nicht ein einzelnes GUI-Muster wie MVVM, MVP, MVC usw. Ich scheine die Referenzimplementierung mit MVP zu erinnern. MVVM scheint nur für WPF am beliebtesten zu sein. –

+2

+1 (und viele mehr, wenn ich könnte) zum Vorteil der Eingabe von XAML, anstatt es zuerst zu entwerfen. XAML erstellt Objekthierarchien. Mit den Objekten müssen Sie lernen, WPF zu verwenden. Lerne dies und der Rest beginnt sich zu verfestigen. Gute Antwort. – Randolpho

2

Von den wenigen Leuten, mit denen ich gearbeitet habe, mussten sie lernen, dass sie alle Tutorials von Expression Blend durchgehen. Das gab ihnen einen guten Hintergrund über WPF und das bessere Werkzeug, um damit zu arbeiten.

2

Wenn Sie Erfahrung mit HTML oder XML oder ähnlich basierten Sprachen haben, ist es nicht besonders schwierig, besonders wenn Sie Web-Design-Erfahrung haben. Wenn Sie streng von einem WinForms-Hintergrund kommen, ist die Lernkurve ein wenig steiler. Ich lerne gerade WPF selbst und da ich aus einem umfangreichen Webentwicklungshintergrund komme, finde ich nicht die Konzepte, die für die meisten von ihnen so schwer zu meistern sind. Ich habe die Online-Tutorial-Videos auf WindowsClient.net als besonders hilfreich gefunden, wenn auch ein bisschen schlecht organisiert.

+7

Dem muss ich widersprechen. Die Kenntnis von HTML und XML erleichtert zwar das Lernen von XAML, hat jedoch keinen Einfluss auf einige der wichtigsten Konzepte von WPF wie Datenbindung, Befehlsmodell, Routingereignisse, Steuerelementvorlagen und Datenvorlagen, Abhängigkeitseigenschaften, Storyboards usw. – jason

+2

@ Jason: Eine der größten Schwierigkeiten von WPF ist die Präsentationsschicht, und hier hilft der Webdesign-Hintergrund, IMO. –

8

Ich habe mit .NET seit mehr als 4 Jahren gespielt, meistens Windows Forms Anwendungen. Binding ist nichts Unbekanntes und ich versuche, gute Praxis in all meinen C# -Anwendungen zu verwenden. In den letzten 1 Monat habe ich WPF für den Job gelernt und ich muss zugeben, dass es SEHR mächtig ist, aber viel schwieriger, Dinge zu erreichen. Sie können viel mehr tun und einige coole Designs mit weniger Aufwand erreichen, aber nur wenn Sie wissen, wie es wirklich funktioniert und es ist schwer, weil es riesig ist.

Mehr, Debugging ist schwieriger - das macht das Lernen auch langsamer. Das Problem, das ich denke, ist die IDE von Visual Studio, die nicht viel im XAML hilft und Sie schnell einige Eigenschaften von IntelliSense von C# verfehlen, wenn Sie Bindung oder andere Sachen tun, die jetzt in einem XML-Tag sind. Ich mag es, aber ja, die Lernkurve ist nicht glatt.

+2

Dies ist genau das, was wir beim Debuggen sehen. Wir bekommen keine Kompilierzeit oder Laufzeitfehler, aber die Dinge funktionieren nicht so, wie wir denken und manchmal frustrierender ist es, warum wir nicht finden können warum. Außerdem, wenn wir uns der Probleme nicht bewusst sind, ist es schwierig, große Menge an Code in Foren zu posten, um Lösungen zu finden. – Marshal

17

Es gibt einen schönen Artikel von Karsten Januszewski Hitting the Curve: On WPF and Productivity genannt Sie interessant finden könnte:

Lassen Sie uns klar sein: WPF kommt mit einer Kurve. Ich habe jetzt beobachtet, wie ein paar Entwickler diese Kurve getroffen haben. Und die Kurve ist steil. Wir sprechen zwischen zwei Wochen bis zwei Monaten der Kurve je nach Entwickler und der Ebene der Erfahrung/Intuition die Entwickler hat. Es wird Momente geben der gesamten Mystifikation und viel Momente der Beleuchtung. Es ist sofort schmerzhaft und angenehm, wenn die Entwickler erfreut über die Entdeckung von eine tiefe und durchdachte UI Plattform. Es ist sofort vertraut und Alien. Es gibt viele Ähnlichkeiten zu anderen UI-Entwicklungsparadigmen: Stile fühlen sich wie CSS, gut so. XAML Code hinter fühlt sich wie ASP.NET, gut Art von. 3D fühlt sich an wie DX oder OpenGL, gut. Routed-Events fühlen sich an wie .NET-Events, naja. Abhängige Eigenschaften fühlen sich wie Eigenschaften, gut Art von. Die Liste könnte weitergehen. Aber admidst diese (Art von) vertraute Metaphern gibt es so viele Alien Konzepte, die beherrscht werden müssen: Kontrolle Templating, Storyboards, Databinding kommen in den Sinn sofort. Es ist keine triviale Kurve und erwarte nicht, dass am Tag 1 oder sogar Woche 1 oder sogar Monat 1.

produktiv sein

Es ist alles lohnt sich aber! ;)

+0

Aus persönlicher Erfahrung stimme ich dem Zeitrahmen von 2 Wochen bis 2 Monaten zu. –

3

Es wird eine dieser 'es hängt' Antworten aber alle wirklich hängt davon ab, ob Sie die Art von Entwickler sind, der versucht, Ihre Fähigkeiten ständig zu verbessern. Wenn das der Fall ist, dann kommt es letztlich auf ein paar Dinge an.

Kaufen WPF Unleashed (andere Bücher sind verfügbar, aber ich wärmstens empfehlen diese), arbeiten Sie durch die Beispiele und in etwa 2 Monaten oder so werden Sie sich fragen, wie Sie jemals Dinge ohne es geschafft haben.

Es ist kein Hexenwerk und es gibt keine Paradigmenwechsel-Konzepte. In der Tat, wenn Sie daran gewöhnt sind, eine gute Trennung zwischen Ihrer Logik und Präsentation zu halten, sollte es genau passen.

Um auf ein Niveau der Meisterschaft zu kommen, suchen Sie wahrscheinlich zwischen 6 und 12 Monaten damit zu spielen.

Viel Glück.

5

Es kann ziemlich steil sein.

Ich verbrachte den Großteil eines Monats damit, mit WPF zu experimentieren und ein Modell unseres aktuellen Produkts zu schreiben, ohne eine Intuition für sein Databinding-Modell zu entwickeln oder herauszufinden, wie Microsoft es verwendet. Ich brauchte viel weniger Zeit, um die Grundlagen von ASP.NET MVC zu verstehen.

[Unsere Anwendung zeigt/hängt von vielen Echtzeitdaten ab, und ich habe das Windows Presentation Foundation-Buch von Nathan verwendet. Vielleicht wäre ein anderes Buch passender gewesen.]

5

WPF ist einfach, sobald Sie die allgemeine Idee, wie es funktioniert - versuchen Sie "WPF - how and why". Das größte Problem ist es herauszufinden, ob es sich überhaupt lohnt und es gibt noch viele Anwendungen, die in Form von Windows Forms und ein bisschen Grafik implementiert werden.

Ich würde auch mit dem früheren Kommentar über den Einstieg in XAML zustimmen - es ist nur wie eine etwas anspruchsvollere HTML und die einzige echte Schwierigkeit ist herauszufinden, was was macht. Um später in einem Projekt stecken zu bleiben - bleibst du nicht immer in einem Projekt hängen? Es ist, wenn Sie beginnen, das 1% zu tun, das schwierig ist.

3

Ja, es ist kein leichter Spaziergang - aber keine Angst. Die Sache mit WPF ist wunderschön, so dass Sie eine konstante positive emotionale Rückmeldung bekommen (zumindest habe ich), wenn Sie es lernen. Du magst es, mit ihm zu spielen und alle paar Minuten "WOW" zu rufen;)

+1

"konstant positive emotionale Rückmeldung." lol. – gonzobrains

+0

@gonzobrains was ist daran so lustig? unwahr? –

10

Die Schwierigkeit beim Erlernen von WPF ist nicht so sehr die API als das Modell. Es ist ein ganz anderes mentales Modell, als Sie mit etwas wie Windows Forms verwenden würden.

Anstatt Methoden zu schreiben, die ein UI-Element unbedingt füllen, binden Sie Daten im Allgemeinen an Eigenschaften eines Objekts. Um komplexes Verhalten zu erzielen, verwenden Sie in der Regel ein gewisses Maß an Komposition.

Als Beispiel, wenn Sie eine Reihe von Elementen in einer Liste haben möchten, mit einem Text gefolgt von einem Bild. In Windows Forms würden Sie die Liste abrufen und sie iterieren. Für jedes Element in der Liste würden Sie das Steuerelement für das Element und den Text erstellen und das Bild hinzufügen und dann das neue Untersteuerelement zur Liste hinzufügen. (Die genaue Prozedur kann je nach Steuerelementtyp variieren. Sie können SubItems hinzufügen, anstatt nur ein Steuerelement zu erstellen usw.).

WPF würde dies sehr unterschiedlich handhaben. In WPF würden Sie auf der obersten Ebene ein Containerobjekt deklarieren und an die Liste binden.

Sie würden dann diesem Container eine Vorlage geben, die verwendet werden soll, um seine Artikel anzuzeigen. Die Vorlage ist im Grunde ein anderes Steuerelement, das die Positionierung von Unterelementen definiert, die an eine Instanz der Klasse gebunden sind, mit der die Liste gefüllt ist.

Es endet mit einem sehr kompositorischen Gefühl und ist absurd mächtig. Es ist auch ein ganz anderes Modell, als die meisten Entwickler gewohnt sind, und bis Sie das Modell internalisieren können, ist es sehr häufig, dass Probleme auftreten, die versuchen, die Dinge so zu machen, wie Sie es in Windows Forms/etc tun würden.

Sobald Sie sich jedoch an das Modell gewöhnt haben, ist es schmerzhaft, zu anderen APIs zurückzukehren. Nicht, weil sie plötzlich hart sind, sondern weil du weißt, wie einfach die Dinge sein können.

8

Wie Sie vielleicht aus meiner Frage Geschichte abgeleitet haben, habe ich auf jeden Fall eine steile Lernkurve gefunden. Du beschreibst meine Erfahrung fast genau. Als Vollzeit-Student (in Mathe und Physik, nicht Software-Engineering), der nur WPF-Programmierung für Hobby-Anwendungen macht, war es ziemlich frustrierend. Ich habe versucht, neue Anwendungen in WPF zu erstellen oder einige meiner alten Anwendungen auf WPF zu portieren, und bleibe immer auf einer kleinen kleinen Sache stecken, die übermäßig hart erscheint. Eine Sache, die ich nicht getan habe --- im Grunde wegen der Zeit Bedenken - ist sitzen mit z. ein Buch oder eine Reihe von Tutorials und gehen Sie Schritt für Schritt durch. Wenn Sie ein professioneller Entwickler sind, könnte dies viel leichter machbar sein und WPF für Sie viel einfacher machen.

Die größte Sache, die mir Ärger macht, denke ich ist, mich mit dem Model-View-ViewModel-Paradigma zu beschäftigen (siehe z.B. this question of mine).Während ich in WinForms nur ein paar Dinge auf ein Formular ziehen und ablegen, mit seinen Eigenschaften herumhantieren und einige Ereignisse im Codebehind einbinden kann, muss ich jetzt darüber nachdenken, Dinge in View, Model und Viewmodel zu partitionieren. Viele dieser Codebehind-Ereignisse werden zu Validierungsregeln oder Databinding-Sachen. Es hilft wahrscheinlich nicht, dass keine meiner Anwendungen wirklich "Datenmanipulations" -Anwendungen sind; Das heißt, sie manipulieren keine Datenbank mit Kundeninformationen oder irgendetwas, wo vieles sinnvoll wäre. Stattdessen ist es eher "Ich möchte ein Textfeld, in das der Benutzer einen URI eingibt, und ich möchte, dass die Schaltfläche" Download "nur aktiviert wird, wenn dieses Textfeld einen gültigen URI enthält." Kleine Dinge wie diese beginnen wirklich ziemlich kompliziert zu werden; Ich muss darüber nachdenken, wo der URI in mein Modell passt, wo er in mein View-Modell passt, ein Validierungs-Framework anschließen und die Eigenschaften des Buttons und des Textfelds mit all diesen Elementen verknüpfen.

Ein weiteres nerviges Problem ist, wie viele Dinge einfach fehlen aus dem Framework. Zum Beispiel sorting listviews.

Am Ende hat WPF jedoch viele Vorteile. The layout framework seems a lot nicer than the primarily pixel-based WinForms model. Es verwendet moderne Schriftarten wie Segoe UI, heh: P. Und seine Compositing-Funktionen sind auch ziemlich beeindruckend, z. Wie natürlich ist es, ein Bild auf eine Schaltfläche zu setzen (legen Sie einfach ein Bild-XAML-Tag in die Schaltfläche XAML-Tag, im Wesentlichen); Ich vermute, dass es auch my problem regarding checkboxes with controls inside of them lösen kann, obwohl ich das noch nicht versucht habe.

+4

Der beste Weg, um über den Model/View/ViewModel Switch zu kommen, ist zu denken in "Was für Daten möchte ich präsentieren?" Machen Sie eine Klasse, die diese Daten verfügbar macht, Sie haben das Viewmodel fertig. In WPF ist es fast immer besser, wenn Sie "Daten präsentieren" anstatt "Steuerelemente auffüllen" verwenden. – kyoryu

Verwandte Themen