it-swarm-eu.dev

WPF vs. WinForms - die Perspektive eines Delphi-Programmierers?

Ich habe die meisten wichtigen Themen zu WPF vs. WinForms gelesen und stecke in der unglücklichen Ambivalenz fest, in die man geraten kann, wenn man sich zwischen der bewährten vorherigen Technologie (Winforms) und ihrem Nachfolger (WPF) entscheidet.

Ich bin ein langjähriger erfahrener Delphi-Programmierer, der endlich den Sprung zu C # schafft. Meine Delphi-Programmierer werden verstehen, dass ich aufgeregt bin zu wissen, dass Anders Hejlsberg von Delphi der Architekt hinter C # war. Ich bin stark von den benutzerdefinierten VCL-Komponenten von Delphi abhängig, insbesondere von denen, die an der Erstellung von mehrstufigen Assistenten und Komponenten beteiligt sind, die als Container für untergeordnete Komponenten dienen.

Vor diesem Hintergrund hoffe ich, dass diejenigen von Ihnen, die von Delphi zu C # gewechselt sind, mir bei meiner Entscheidung WinForms vs. WPF beim Schreiben meiner ersten Bewerbungen helfen können. Beachten Sie, dass ich sehr ungeduldig bin, wenn Codierung und Dinge wie vollwertige automatische Vervollständigung und ordnungsgemäße Debugger-Unterstützung ein Projekt für mich erstellen oder unterbrechen können, einschließlich der Möglichkeit, leicht verfügbare Informationen zu API-Funktionen und -Aufrufen zu finden, und vor allem Problemumgehungen für Fehler .

Die SO Threads und Kommentare im Datumsbereich von Anfang 2009 geben mir große Besorgnis über WPF, wenn es um potenzielle Frustrationen geht, die meine C # UI-Entwicklungscodierung beeinträchtigen könnten. Andererseits übermäßige Ausgaben Das Erlernen einer API-Technologie, die, auch wenn sie nicht aufgegeben wird, bald ersetzt wird (WinForms), ist ebenso problematisch, und ich finde die GPU-Unterstützung in WPF verlockend.

Daher meine Ambivalenz. Da ich noch keine der beiden Technologien gelernt habe, habe ich die seltene Gelegenheit, einen Neuanfang zu machen, und muss mich nicht der großen "Verlernen" -Kurve stellen, die in verschiedenen Threads erwähnt wurde, wenn ein WinForms-Programmierer zu WPF wechselt. Auf der anderen Seite, wenn die Verwendung von WPF einfach zu frustrierend ist oder andere schwerwiegende negative Konsequenzen für einen ungeduldigen Entwickler hat RAD Entwickler wie ich), bleibe ich einfach bei WinForms, bis WPF das gleiche Niveau erreicht Um Ihnen ein konkretes Beispiel für meine Psychologie als Programmierer zu geben, habe ich VB und anschließend Delphi) verwendet, um den sehr realen Schmerz der Codierung mit MFC, einem Windows, vollständig zu vermeiden UI-Bibliothek, unter der viele Entwickler bei der Entwicklung früher Windows-Apps gelitten haben. Ich habe mein Glück, MFC zu vermeiden, nie bereut.

Es wäre auch beruhigend zu wissen, ob Anders Hejlsberg an der Architektur von WPF und/oder WinForms beteiligt war und ob es Unterschiede in der kreativen Vision und der Benutzerfreundlichkeit gibt, die in beiden Codebasen enthalten sind. Lassen Sie mich abschließend noch einmal für die Delphi-Programmierer wissen, wie viel "IDE-Schock" ich bei der Verwendung von WPF im Gegensatz zu WinForms habe, insbesondere wenn es um die Debugger-Unterstützung geht. Alle für 2011 aktualisierten Kommentare zum Arbeitsmarkt sind ebenfalls willkommen.

38
Robert Oschler

Wenn Sie einen Delphi-Hintergrund haben, werden Sie von WinForms enttäuscht sein. Sie werden versuchen, Dinge zu tun, die in der VCL einfach waren, nur um festzustellen, dass sie schmerzhaft schwierig oder sogar unmöglich sind. WPF wird viel weniger eng sein.

Hier sind zum Beispiel nur einige der WinForms-Einschränkungen, auf die wir gestoßen sind:

  • WinForms hat nichts Vergleichbares zu TAction. Wenn Sie es also gewohnt sind, mit Aktionen zu codieren, denselben Text und dasselbe Symbol zwischen einem Menüelement und einer Symbolleistenschaltfläche sowie einem Rechtsklick-Menü zu teilen, Ihre Aktivierungslogik zu zentralisieren und den aktivierten Status zu aktualisieren im Hintergrund mit OnUpdate ... werden Sie WinForms hassen, wo Sie all das auf die harte und fehleranfällige Weise tun müssen.
  • Das alte (.NET 1.0 Vintage) MainMenu von WinForms unterstützt keine Bilder neben Menüelementen, und das neue (in .NET 2.0 eingeführte) MenuStrip ist voller Fehler , das Microsoft ablehnt) fix (weil die Bugfixes die Abwärtskompatibilität beeinträchtigen könnten).
  • Viele Kontrollen, z. Die TreeView sind im Vergleich zu ihren VCL-Gegenstücken äußerst unterdurchschnittlich (schmerzhaft langsam, keine Eigentümerzeichnung, viele Anpassungsoptionen fehlen usw.).
  • Es gibt nichts, was der lebendigen Community von Steuerungsentwicklern von Drittanbietern ähnelt, die Sie in Delphi gewohnt sind. Es gibt Qualitätskontrollbibliotheken, aber Sie bezahlen dafür - kostenlose Angebote wie VirtualTreeView gibt es für WinForms einfach nicht.

WPF ist in mancher Hinsicht etwas nackter als WinForms, aber es ist immens erweiterbarer.

  • Du willst so etwas wie TAction? WPF verfügt über ICommand, das genauso umfangreich ist wie Sie es gewohnt sind (aber lesen Sie unbedingt Josh Smiths MVVM-Artikel - normalerweise müssen Sie Ihre Befehle manuell aktivieren/deaktivieren, wenn sich der Status ändert, aber Diese Version löst Ihren Aktivierungscode automatisch im Hintergrund aus, wie Sie es bei OnUpdate gewohnt sind.
  • Sie möchten Bilder in Menüs? Das ist eingebaut (und bei weitem nicht so fehlerhaft wie in WinForms).
  • WinForms lässt die Eigentümerzeichnung für einige wichtige Steuerelemente aus, aber wenn Sie stattdessen WPF verwenden, benötigen Sie keine Eigentümerzeichnung - wenn Sie Wenn Ihre TreeView-Knoten schwarzen Text gefolgt von einer blauen Zahl in Klammern haben sollen, fügen Sie ihn einfach in Ihre DataTemplate ein und es funktioniert, ohne dass ein hässlicher Code zum Zeichnen von Eigentümern erforderlich ist.
  • Sie möchten Steuerelemente von Drittanbietern? In vielen Fällen benötigen Sie sie nicht, da Sie WinForms erweitern können und VCL-Entwickler nur davon träumen können.

WPF hat eine sehr steile Lernkurve, aber wenn Sie ein gutes Buch (z. B. " WPF 4 Unleashed ") in die Hand nehmen, hilft es Ihnen, das Schlimmste zu überwinden - und Sie werden es sein Ich bin froh, mit einem Framework zu arbeiten, das Sie nicht so zurückhält wie WinForms.

21
Joe White

Ich bin normalerweise sehr überrascht, wenn Leute sagen, dass sie keine guten Erfahrungen mit WPF gemacht haben. Ich bin ein Entwickler, der von C++/MFC zu C #/WinForms zu C #/WPF gewechselt ist. Der Übergang von WinForms zu WPF war nicht einfach, da das Erlernen von XAML nicht sehr einfach ist, aber sobald Sie es verstanden haben, ist es eine großartige Technologie. Ich kann nicht zu WinForms zurückkehren. WPF ist einfach großartig.

Die andere Sache, die mich stört, ist, wie Leute WPF normalerweise nur mit der Benutzeroberfläche assoziieren. Es ist in der Tat 100-mal besser als WinForms, meiner Meinung nach, wenn es um das Design der Benutzeroberfläche geht, aber es gibt viele andere Gründe, warum Sie WPF lieben werden:

  1. UI natürlich.
  2. Bindungen. Einfach nur Magie. Die mächtigste Funktion nach der Benutzeroberfläche. LOB-Anwendungen profitieren am meisten davon.
  3. Befehle.
  4. Trennung von Bedenken. Designer arbeiten am Design, Programmiererprogramm.
  5. Angehängte Eigenschaften. Sie können die Funktionalität von Steuerelementen von Drittanbietern ohne Quellcode erweitern (obwohl dieser Punkt durchaus Teil des ersten Punkts sein kann).
  6. Einfacher Übergang zu Silverlight (sowohl Web als auch WP7)

Sie stimmen mir vielleicht nicht in Bezug auf den letzten Punkt als Grund für das Erlernen von WPF zu, aber wenn Sie mich fragen, ist dies einer der größten. Wenn Sie WPF lernen, können Sie problemlos zu Silverlight wechseln. Silverlight wird immer größer und es ist auch eine großartige Technologie.

Und der größte Grund ist, es ist die Zukunft. Es kann mit Silverlight zusammengeführt werden, aber die Fähigkeiten bleiben gleich.

Daher werde ich Ihnen dringend raten, den WPF-Weg zu gehen.

13
Yogesh

WPF ist eindeutig der richtige Weg, um in Zukunft zu denken. Es ist schwer zu meistern, aber die Plattform ist sehr gut aufgebaut und flexibel.

Einige Ratschläge:

  • Einfach anfangen: Versuchen Sie nicht, Ihr erstes Projekt nur mit MVVM oder ausgefallenen Animationen zu implementieren. Beginnen Sie einfach mit Fenstern, Schaltflächen und Listen.
  • Nutzen Sie DataBinding.
  • Kaufen Sie das Buch WPF Unleashed von Adam Nathan.
5
Eduardo Molteni

Ich sollte zuerst beachten, dass ich größtenteils ein asp.net-Entwickler bin, obwohl ich schon viele Winforms verwendet habe. Der Wechsel zu WPF ist nicht so groß wie Sie es (imo) nach ungefähr einer Woche (40+ Stunden) machen, das meiste war wieder eine Selbstverständlichkeit.

Jedenfalls glaube ich, dass Anders Hejlsberg einer der Architekten hinter WPF ist, zumindest laut den Herausgebern dieses Buches->

Als einer der Architekten hinter WPF erklärt Chris Anderson gekonnt nicht nur das„ Wie “, sondern auch das„ Warum “. Dieses Buch ist eine hervorragende Quelle für alle, die die Gestaltungsprinzipien verstehen möchten und Best Practices von WPF. ”–Anders Hejlsberg, technischer Mitarbeiter der Microsoft Corporation

http://www.Amazon.com/Essential-Windows-Presentation-Foundation-WPF/dp/0321374479

4
Spooks

Winforms ist nahezu identisch mit der Delphi-Entwicklung. Und dafür gibt es natürlich einen Grund. So wie das Delphi/Object Pascal-Objektmodell C # stark beeinflusst hat, hat das Formularsystem Winforms beeinflusst.

WPF scheint die Richtung zu sein, in die die Dinge gehen; Es wurde gesagt, dass die (wunderschöne!) VS2010-Benutzeroberfläche WPF-basiert ist, im Gegensatz zu früheren Generationen, die auf Winforms basieren.

Wenn Sie in Ihrer Komfortzone bleiben möchten, wählen Sie Winforms. Wenn Sie sich über das Neueste und Beste informieren möchten, tauchen Sie in WPF ein.

2
3Dave

Ich bin kein Delphi-Programmierer, aber ja, ich habe sowohl an WinForm (stark) als auch an WPF (weniger als moderat) gearbeitet. Ich stimme Ihnen in gewissem Maße in Bezug auf die Frustration für jemanden zu, der von WinForm zu WPF wechseln würde, da ich mich in dieser Situation befinde, aber nur, bis ich mich daran gewöhnt habe. Erfahren Sie und sehen Sie, wie wunderbar und flexibel WPF im Vergleich zu WinForm ist. Es hat eine schwere Lernkurve, zumindest für jemanden mit Delphi-Hintergrund und nicht für Winform. Für Sie lohnt es sich auf jeden Fall, auf WPF anstatt auf WinForm umzusteigen, und es ist die Zeit wert.

Vielleicht möchten Sie sich zunächst die folgenden Links ansehen:

2
Kumar

Ich hatte einige Windows Forms-Arbeiten ausgeführt (hauptsächlich auf Pocket PCs) sowie eine andere Nicht-NET-Umgebung, die dieselben Prinzipien verwendete. Als ich vor ungefähr drei Jahren zu WPF wechselte, schwor ich in den ersten Monaten darauf. Irgendwann hat es nur "geklickt" und ich habe nicht zurückgeschaut - tatsächlich wäre ich verblüfft, wenn mein nächstes Projekt mich dazu zwingen würde, zu Windows Forms zurückzukehren.

Das letzte Mal, dass Windows Forms aktualisiert wurde, war 2005 (VS 2005.). Es ist immer noch vorhanden, wird aber von Microsoft nicht mehr verbessert. WPF ist das neue Kind auf dem Block für Desktop-Apps. Wenn Sie also mit MS-Tools auf die .NET-Plattform wechseln möchten, ist dies die sichere Sache. Einige Leute drücken Silverlight als Desktop-Lösung, aber als ich es als eine Möglichkeit betrachtete, stellte ich fest, dass es zu viele Einschränkungen gab (was in einem Webkontext sinnvoll sein kann, aber nicht so sehr auf dem Desktop).

Fazit: Es gibt eine steile Lernkurve, und ich lerne sie immer noch. Aber es hat sich gelohnt. Es macht viel Spass.

1
MetalMikester

Wenn Sie neue Anwendungen von Grund auf neu schreiben, ist die Verwendung von WinForms ein Fehler. Aus Investitionssicht ist es im Grunde genommen tot. Microsoft wird es noch lange beibehalten, aber Sie erhalten keine neuen Funktionen, keinen neuen Support usw. WPF ist die klare Richtung für Desktop-Anwendungen für die Zukunft auf der MS-Plattform.

Aus beruflicher Sicht sind Sie auch viel besser dran, WPF vs. WinForms zu kennen. Aus den gleichen Gründen wie oben. Außerdem haben Sie gute Kenntnisse im Erlernen von Silverlight. Es gibt eine Menge Überlappungen zwischen diesen beiden Plattformen.

Und schließlich macht WPF einfach mehr Spaß. Und mächtiger.

Die Lernkurve ist steiler, das gebe ich dir. Aber am Ende ist es lohnender.

1
RationalGeek

Eine zusätzliche Überlegung, die erwähnt werden sollte, ist, dass es keinen Plan für die WPF-Unterstützung in Mono gibt . Mir ist klar, dass Sie kein Interesse an (mono-) plattformübergreifender Unterstützung bekundet haben, aber möglicherweise besteht in Ihrer Zukunft eine Möglichkeit dafür (wenn Sie sich für Winforms entscheiden). Voraussichtlich wird WPF in Mono (oder ähnlichem) unterstützt.

bearbeiten: Wie der von mir bereitgestellte Link hervorhob und Gulshans Kommentar hervorhob, ist Moonlight eine Open-Source-Initiative des Mono-Teams, um plattformübergreifende Silverlight-Unterstützung bereitzustellen .

0
Argalatyr