WPF vs. WinForms - perspektywa programisty Delphi?

38

Przeczytałem większość głównych wątków na temat WPF vs. WinForms i utknąłem w niefortunnej ambiwalencji, w którą możesz wpaść, decydując się między wypróbowaną i prawdziwą poprzednią technologią (Winforms), a jej następcą (WPF).

Jestem wieloletnim doświadczonym programistą Delphi, który w końcu robi skok do C #. Moi koledzy programiści Delphi zrozumieją, że cieszę się, że Anders Hejlsberg, znany z Delphi, był architektem C #. Mam silne uzależnienie od niestandardowych komponentów VCL firmy Delphi, zwłaszcza tych, które są zaangażowane w tworzenie wieloetapowych kreatorów i komponentów, które działają jak pojemnik na komponenty potomne.

W tym kontekście mam nadzieję, że ci z was, którzy przeszli z Delphi na C #, mogą mi pomóc w mojej decyzji WinForms vs. WPF o napisaniu moich początkowych aplikacji. Uwaga: jestem bardzo niecierpliwy, gdy kodowanie i takie rzeczy, jak pełnoprawna autouzupełnianie i odpowiednia obsługa debuggera mogą dla mnie stworzyć lub zepsuć projekt, w tym możliwość znalezienia łatwo dostępnych informacji na temat funkcji API i wywołań, a tym bardziej obejścia błędów .

Wątki SO i komentarze z zakresu dat na początku 2009 r. Budzą moje obawy dotyczące WPF, jeśli chodzi o potencjalne frustracje, które mogłyby zakłócić moje kodowanie programowania C # UI. Z drugiej strony spędzanie nadmiernej ilości czasu na uczeniu się technologii API, która nawet, jeśli nie zostanie porzucona, wkrótce zostanie zastąpiona (WinForms), jest równie kłopotliwa i uważam, że obsługa GPU jest kusząca.

Stąd moja ambiwalencja. Ponieważ nie nauczyłem się jeszcze żadnej technologii, mam rzadką okazję, aby zacząć od nowa i nie muszę stawić czoła wielkiej krzywej „oduczania”, o której ludzie wspominali w różnych wątkach, gdy programista WinForms przechodzi na WPF. Z drugiej strony, jeśli korzystanie z WPF będzie po prostu zbyt frustrujące lub będzie miało inne poważne negatywne konsekwencje dla niecierpliwego programisty RAD, takiego jak ja, to po prostu pozostanę przy WinForms, dopóki WPF nie osiągnie tego samego poziomu wsparcia i łatwości użycia. Aby dać konkretny przykład mojej psychologii jako programisty, użyłem VB, a następnie Delphi, aby całkowicie uniknąć bardzo prawdziwego bólu związanego z kodowaniem za pomocą MFC, biblioteki interfejsu użytkownika systemu Windows, przez którą wielu programistów cierpiało podczas tworzenia wczesnych aplikacji Windows. Nigdy nie żałowałem, że udało mi się uniknąć MFC.

Byłoby również pocieszające wiedzieć, czy Anders Hejlsberg miał rękę w architekturze WPF i / lub WinForm, i czy istnieją jakiekolwiek różnice w twórczej wizji i łatwości użycia zawartych w którejkolwiek bazie kodu. Na koniec, dla programistów Delphi, daj mi znać, ile kosztuje „IDE schock”, gdy używam WPF w przeciwieństwie do WinForm, szczególnie jeśli chodzi o obsługę debuggera. Docenione zostaną również wszelkie komentarze rynku pracy zaktualizowane w 2011 r.

Robert Oschler
źródło
2
Czy WPF nie ma naprawdę złej reputacji ze względu na słabą wydajność?
David Heffernan
9
@David: Rzeczywiście ma tę reputację, ale jak zwykle rzeczywistość nie jest tak zła jak rap. GUI Visual Studio 2010 zostało ponownie napisane w WPF i na większości maszyn nie wydaje się zauważalnego spadku prędkości w porównaniu do VS 2008. @Robert: Biorąc to pod uwagę, moja rekomendacja byłaby bardzo korzystna dla WinForms, szczególnie dla konwersji Delphi. Ale jestem trochę niezdecydowany, aby opublikować to jako odpowiedź, aby nie zostało ono zanegowane w zapomnieniu. Wydaje się, że wszyscy są przeciwko temu, ponieważ jest to „stara” technologia, jakby to coś naprawdę znaczyło.
Cody Gray,
@Cody. Zrozumiany. Otrzymuję świetne informacje z odpowiedziami i komentarzami, ale mam nadzieję na bardziej bezpośrednie informacje na temat WPF i jego obsługi debuggera vs. WinForm i niektórych informacji o rynku pracy. Odpowiedzi na moje pytania w tych obszarach tematycznych są wciąż potrzebne.
Robert Oschler
1
@CodyGray: Musisz żartować. VS2010 jest sto razy wolniejszy niż VS2008, podobnie jak WPF. Twoje wrażenie jest prawdopodobnie spowodowane uprzedzeniem zwykłego programisty: patrzysz tylko na najnowsze zaawansowane maszyny, których nie ma większość zwykłych użytkowników.
Timwi

Odpowiedzi:

21

Jeśli masz doświadczenie w Delphi, będziesz rozczarowany WinForms. Będziesz próbował robić rzeczy, które były łatwe w VCL, ale okazało się, że są boleśnie trudne, a nawet niemożliwe. WPF będzie znacznie mniej ograniczający.

Oto na przykład kilka ograniczeń WinForm, na które natrafiliśmy:

  • WinForms nie ma nic, co można by porównać z TAction, więc jeśli jesteś przyzwyczajony do kodowania za pomocą akcji, dzielenia tego samego tekstu i ikony między pozycją menu i przyciskiem paska narzędzi oraz menu kliknięcia prawym przyciskiem, centralizując logikę włączania i aktualizując stan włączenia w tle z OnUpdate ... nienawidzisz WinForms, w których musisz robić to wszystko w sposób trudny i podatny na błędy.
  • Stare (główne .NET 1.0) WinForms Menu główne nie obsługuje obrazów obok pozycji menu, a nowe (wprowadzone w .NET 2.0) MenuStrip jest pełne błędów, których Microsoft odmawia naprawy (ponieważ poprawki mogą zepsuć wsteczną kompatybilność).
  • Wiele elementów sterujących, np. TreeView, jest bardzo niedoinformowanych w porównaniu do ich odpowiedników VCL (boleśnie powolne, brak losowania przez właściciela, brak wielu opcji dostosowywania itp.)
  • W Delphi nie ma nic bardziej przypominającego prężną społeczność zewnętrznych programistów kontrolujących. Istnieją biblioteki kontroli jakości, ale płacisz za nie - darmowe oferty, takie jak VirtualTreeView, po prostu nie są dostępne dla WinForm.

WPF jest pod pewnymi względami trochę bardziej goły niż WinForm, ale jest znacznie bardziej rozszerzalny.

  • Chcesz coś takiego? WPF ma ICommand, który jest tak bogaty, jak jesteś przyzwyczajony (ale pamiętaj, aby przeczytać artykuł MVVM Josha Smitha - zwykle musisz włączyć / wyłączyć polecenia ręcznie, gdy zmienia się stan, ale jego wersja automatycznie uruchamia kod aktywujący w tle, tak jak przyzwyczaiłeś się do OnUpdate).
  • Chcesz obrazy w menu? To jest wbudowane (i nie jest tak błędne jak w WinForms).
  • WinForms pomija rysowanie przez właściciela na niektórych ważnych kontrolkach, ale jeśli używasz WPF, nie potrzebujesz rysowania przez właściciela - jeśli chcesz, aby twoje węzły TreeView miały czarny tekst, a po nim niebieską liczbę w nawiasach, po prostu umieść go w DataTemplate i działa, nie jest potrzebny brzydki kod rysowany przez właściciela.
  • Chcesz kontroli innych firm? W wielu przypadkach nie potrzebujesz ich, ponieważ możesz rozszerzyć to, co jest, w taki sposób, że WinForms i tak, programiści VCL mogą tylko pomarzyć.

WPF ma bardzo stromą ścieżkę uczenia się, ale jeśli wybierzesz dobrą książkę (np. „ WPF 4 Unleashed ”), pomoże ci to przetrwać najgorsze - i będziesz zadowolony z pracy z frameworkiem, który nie powstrzyma cię tak, jak WinForms.

Joe White
źródło
1
Dzięki za bezpośredni komentarz Delphi. Wszelkie komentarze na temat rynku pracy i wszelkie informacje dotyczące obsługi debugera VS 2010 dla WPF, szczególnie problemy ze śledzeniem / inspekcją? Sprawdzę książkę, do której linkujesz.
Robert Oschler,
1
Nie wiem o rynku pracy. Jeśli chodzi o debugger, spodziewaj się frustracji, jeśli konstruktor twojego okna zgłasza wyjątek, ponieważ debuger niechętnie da ci ślad stosu - ale wszystko, co musisz zrobić, to wykopać dwa poziomy InnerException w oknie dialogowym szczegółów wyjątku debuggera. A jeśli wiązania nie działają, uruchom debugger i spójrz w okno Wyjście, aby zobaczyć błędy wiązania. Poza tym nie jestem pewien, jakie masz obawy. WPF debuguje OK z mojego doświadczenia, a MVVM pozwala na testowanie jednostkowe większej logiki interfejsu użytkownika niż w WinForms.
Joe White
6
Bardzo stroma krzywa uczenia się. W WPF nie ma tak dużo programów; zadajesz pytania, jak przekonać WPF do robienia tego, co chcesz.
Ian Boyd,
W rzeczywistości niektóre z największych przeszkód polegają na nauczeniu się pracy z ramami, które właściwie rozdzielają obowiązki, zamiast po prostu ślepo wszystko wywodzić z TKitchenSink.
Joe White
1
Czy mogę mieć formularze Delphi, ale zachowuję język C #? Proszę?
Robert Harvey
13

Zazwyczaj jestem bardzo zaskoczony, gdy ludzie mówią, że nie mieli dobrego doświadczenia z WPF. Jestem programistą, który przeszedł z C ++ / MFC na C # / WinForms na C # / WPF. Przejście z WinForm do WPF nie było łatwe, ponieważ nauka XAML nie jest bardzo łatwa, ale kiedy już ją opanujesz, jest to niesamowita technologia. Ja, na przykład, nie mogę wrócić do WinForms. WPF jest po prostu niesamowity.

Inną rzeczą, która mnie niepokoi, jest to, że ludzie zwykle kojarzą WPF tylko z interfejsem użytkownika. Moim zdaniem jest on 100 razy lepszy niż WinForm w łatwości projektowania interfejsu użytkownika, ale istnieje wiele innych powodów, dla których pokochasz korzystanie z WPF:

  1. Oczywiście interfejs użytkownika.
  2. Wiązania Po prostu magia. Najpotężniejsza funkcja po interfejsie użytkownika. Największą zaletą są aplikacje LOB.
  3. Polecenia.
  4. Rozdzielenie obaw. Projektanci pracują nad projektem, programem dla programistów.
  5. Załączone właściwości. Możesz rozszerzyć funkcjonalność kontrolek stron trzecich bez kodu źródłowego (chociaż ten punkt może być również częścią pierwszego punktu).
  6. Łatwe przejście do Silverlight (zarówno internetowa, jak i WP7)

Być może nie zgadzasz się ze mną w sprawie ostatniego punktu, który byłby powodem do nauki WPF, ale jeśli mnie zapytasz, jest to jeden z największych. Uczysz się WPF, możesz łatwo przejść do Silverlight. Silverlight rośnie w siłę, a także jest niesamowitą technologią.

A najważniejszym powodem jest przyszłość. Może zostać połączony z Silverlight, ale umiejętności pozostaną takie same.

Więc zdecydowanie doradzę ci, abyś poszedł drogą WPF.

Jogesh
źródło
1
Nie twierdzę, że się nie zgadzam, ale wszystkie te powody są związane z interfejsem użytkownika (chociaż mówisz, że inną rzeczą, która mnie martwi, jest to, jak ludzie zwykle kojarzą WPF tylko z interfejsem użytkownika )
Ed S.
1
+1, ponieważ zgadzam się ze wszystkimi twoimi punktami. Muszę wybrać, czy chcę się uczyć WPF lub Winforms, wybieram WPF i nigdy tego nie żałowałem. @Ed: Nie uważam żadnego z nich za ściśle związany z interfejsem użytkownika, z wyjątkiem pierwszego.
Rachel
1
@Rachel: Naprawdę? Powiązanie służy do aktualizacji interfejsu użytkownika, gdy zmienia się wartość właściwości. Oddzielenie problemów w # 4 oczywiście dotyczy tylko tworzenia interfejsu użytkownika. # 5 dotyczy kontroli stron trzecich. Brak interfejsu użytkownika, brak kontroli. # 6 ponownie dotyczy tłumaczenia interfejsu użytkownika Silverlight. Czy coś brakuje?
Ed S.
3
Mniej więcej poszedłem w drugą stronę: WPF -> WinForms -> C ++ / MFC. Tak, jestem buntownikiem; Płynę w górę rzeki. Po prostu nie widzę nic interesującego w tym, co WPF wnosi do interfejsu użytkownika. Garść okropnego, nienatywnego oprogramowania nie jest moim pomysłem na „postęp”. Poza tym nie jestem pewien, w jaki sposób wzorce projektowe, które tak wiele (w tym ta odpowiedź) kojarzy z WPF, są w jakikolwiek sposób wyłączne dla WPF. Wzorów projektowych można używać w dowolnym języku lub strukturze GUI. Czy różnica jest po prostu taka, że ​​jeśli nie jesteś do tego zmuszony , ludzie tego nie zrobią? Łatwość przejścia do Silverlight jest jedynym istotnym powodem tutaj.
Cody Gray
5
Moje pierwsze zadanie z aplikacją WPF: upuść pasek narzędzi, aby miał 14 dlus wysokości. nie można tego zrobić . Drugie zadanie: ustaw czcionkę formularza, dopasowując ją do rozmiaru i czcionki użytkownika. nie można tego zrobić Trzeci krok: dodawanie elementów do widoku listy bez wiązania nie można zrobić I wyjść.
Ian Boyd
5

Najwyraźniej WPF to sposób na myślenie w przyszłości. Opanowanie go jest trudne, ale platforma jest bardzo dobrze zaprojektowana i elastyczna.

Kilka wskazówek:

  • Zacznij od łatwości: nie próbuj wdrażać pierwszego projektu przy użyciu tylko MVVM lub fantazyjnych animacji. Zacznij od prostych okien, przycisków i list.
  • Skorzystaj z DataBinding.
  • Kup książkę WPF Unleashed autorstwa Adama Nathana.
Eduardo Molteni
źródło
+1. Praktyczna odpowiedź. Staraj się nie realizować pierwszego projektu przy użyciu tylko MVVM lub fantazyjnych animacji
Karthik Sreenivasan
4

Powinienem najpierw zauważyć, że jestem głównie programistą asp.net, chociaż już wcześniej dużo używałem winforms. Przejście na WPF nie jest tak duże, jak to robisz (imo) po około tygodniu (ponad 40 godzin), większość była znowu drugą naturą.

W każdym razie uważam, że Anders Hejlsberg jest jednym z architektów stojących za WPF, przynajmniej według wydawców tej książki->

Jako jeden z architektów WPF Chris Anderson umiejętnie wyjaśnia nie tylko„ jak ”, ale także„ dlaczego ”. Ta książka jest doskonałym źródłem informacji dla każdego, kto chce zrozumieć zasady projektowania i najlepsze praktyki WPF. ”–Anders Hejlsberg, pracownik techniczny, Microsoft Corporation

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

Strachy
źródło
11
„Jako jeden z architektów WPF, Chris Anderson umiejętnie wyjaśnia ...” sugeruje, że Chris Anderson jest jednym z architektów WPF. Anders Hejlsberg jest tylko „pracownikiem technicznym” w Microsoft Corporation, zgodnie z cytowanym tekstem, co nie dowodzi jego zaangażowania w WPF.
Andreas Rejbrand
Ach, to może być prawda, ale to pokazuje, że to szanuje!
2
A przynajmniej szanuje Chrisa.
Bruce McGee
1
A przynajmniej, że dział PR ma kogoś, kto ma reputację do komentowania.
Szybko_nie
@Andreas; Dobry żart: tylko „facet techniczny”. Nie chce pomniejszać Chrisa Andersona - jest świetnym facetem, który ma nieco niski profil ( msdn.microsoft.com/en-us/ff395959 jest tam, ale simplegeek.com nie był długo aktualizowany). Anders Hejlsberg jest zaangażowany w wiele rzeczy .NET (stypendyści mają szeroki zasięg), w końcu jest facetem od frameworków (VCL, WCF itp. - patrz simple-talk.com/content/article.aspx?article=673 i Microsoft) .com / presspass / exec / techfellow / Hejlsberg / default.mspx ) i jest tylko kilku technicznych stypendystów ...
Jeroen Wiert Pluimers
2

Winforms jest prawie identyczny z rozwojem Delphi. I oczywiście jest ku temu powód. Podobnie jak model obiektowy Delphi / Object Pascal silnie wpłynął na C #, tak system formularzy wpłynął na Winforms.

WPF wydaje się być kierunkiem, w którym zmierzają; powiedziano, że (wspaniały!) interfejs użytkownika VS2010 jest oparty na WPF, w przeciwieństwie do poprzednich generacji, które były zbudowane na Winforms.

Jeśli chcesz pozostać w strefie komfortu, skorzystaj z winforms. Jeśli chcesz być na bieżąco z najnowszymi i najlepszymi, zanurz się w WPF.

3Dave
źródło
3
WinForms rozszerza Delphi, w rzeczywistości jest bardzo frustrujące w porównaniu do Delphi. Bardziej przypomina VB-3 niż Delphi, a IME poziom frutsracji jest podobny.
2

Nie jestem programistą Delphi, ale tak, pracowałem zarówno nad WinForm (mocno), jak i WPF (mniej niż średnio). Zgadzam się z tobą w pewnym stopniu na poziomie frustracji dla kogoś, kto zmieniłby WinForm na WPF, ponieważ ja sam jestem w takiej sytuacji, ale tylko do momentu, kiedy się do tego przyzwyczaiłem. Dowiedz się i zobacz, jak cudowny i elastyczny z WPF jest w porównaniu z WinForm. Ma ciężką krzywą uczenia się, przynajmniej dla kogoś, kto pochodzi z Delphi, a nie Winform. Dla Ciebie zdecydowanie warto przejść na WPF zamiast WinForm i warto.

Na początek warto zajrzeć do poniższych linków:

Kumar
źródło
1

Zrobiłem trochę pracy z Windows Forms (głównie na Pocket PC), a także inne środowisko inne niż .NET, które używało tych samych zasad. Kiedy przeniosłem się do WPF około trzy lata temu, przez pierwsze kilka miesięcy przysięgałem na to. W końcu po prostu „kliknęło” i nie oglądałem się za siebie - w rzeczywistości byłbym zepsuty, gdyby mój następny projekt wymagał ode mnie powrotu do Windows Forms.

Ostatnia aktualizacja formularzy Windows Forms miała miejsce w 2005 r. (VS 2005.) Wciąż tam jest, ale nie jest już poprawiana przez Microsoft. WPF jest nowym dzieckiem w aplikacjach komputerowych, więc jeśli zamierzasz przejść na platformę .NET za pomocą narzędzi MS, powiedziałbym, że jest to bezpieczny zakład. Niektórzy ludzie pchają Silverlight jako rozwiązanie komputerowe, ale kiedy spojrzałem na to jako możliwość, stwierdziłem, że ma zbyt wiele ograniczeń (co może mieć sens w kontekście sieci, ale nie tak bardzo na pulpicie).

Konkluzja: Istnieje stroma krzywa uczenia się i wciąż się jej uczę. Ale wszystko było tego warte. To świetna zabawa.

MetalMikester
źródło
1

Jeśli masz zamiar pisać nowe aplikacje od zera, używanie WinForm byłoby błędem. Zasadniczo jest martwy z punktu widzenia inwestycji. Microsoft będzie to utrzymywał przez długi czas, ale nie dostaniesz żadnych nowych funkcji ani nowej pomocy itp. WPF jest wyraźnym kierunkiem dla aplikacji komputerowych na przyszłość na platformie MS.

Z perspektywy kariery znacznie lepiej jest znać WPF vs. WinForms. Z tych samych powodów powyżej. Będziesz także miał dobre podstawy do nauki Silverlight. Te dwie platformy nakładają się na siebie.

I na koniec, WPF to po prostu więcej zabawy. I mocniejszy.

Krzywa uczenia się jest bardziej stroma, daję ci to. Ale w końcu jest to bardziej satysfakcjonujące.

RationalGeek
źródło
0

Jedną dodatkową kwestią, o której należy wspomnieć, jest to, że nie ma planu wsparcia WPF w trybie mono . Zdaję sobie sprawę, że nie interesowałeś się (mono) obsługą wieloplatformową, ale może być taka możliwość w przyszłości (jeśli korzystasz z Winforms). Prawdopodobnie nadejdzie wsparcie dla WPF w trybie mono (lub podobnym).

edycja: Jak wskazałem podany przeze mnie link i uwypuklony komentarz Gulshana, Moonlight to wysiłek typu open source prowadzony przez zespół mono w celu zapewnienia wsparcia Silverlight na wielu platformach .

Argalatyr
źródło
Ale Moonlight jest w fazie rozwoju.
Gulshan
-1

Byłem podekscytowany, gdy usłyszałem o WPF, pomysł brzmiał świetnie, a wszystko, co widziałem, było piękne. Kiedy jednak zacząłem go używać w programie Visual Studio 2008 (co prawda w wersji beta), praca z projektantem / IDE była frustrująca i dziwaczna.

Umieściłem wtedy trochę informacji na swoim blogu:
http://blog.dantup.com/2007/08/visual-studio-2008-beta-2-first.html
http://blog.dantup.com/2007 /08/wpf-designer-cider-part-2.html

Nie próbowałem tego w 2010 roku, chociaż rozmawiałem z kilkoma osobami, które tak zrobiły, i wydaje się, że wciąż jest to trochę skomplikowane / denerwujące.

Myślę, że twoja aplikacja niewątpliwie będzie wyglądać / czuć się lepiej w WPF, ale myślę też, że zbudowanie zajmie ci więcej czasu, a po drodze uderzysz mocno głową.

Danny Tuppeny
źródło
„Myślę, że Twoja aplikacja niewątpliwie wyglądałaby / czułaby się lepiej w WPF”. Niekoniecznie - WPF nie uratuje cię przed napisaniem gównianego interfejsu użytkownika. Mam tutaj kilka przykładów (z których jeden jest mój, choć ten był po prostu szybką i brudną aplikacją do testowania niektórych rzeczy.) Jeśli ty (i ci, którzy nazywają strzały, czyli $$), jesteś gotów wydać czas i wysiłek, możesz zrobić niesamowite rzeczy w WPF.
MetalMikester
Uczciwy punkt. Miałem na myśli to, że WPF pozwala tworzyć piękniejsze aplikacje, ponieważ są mniej ograniczone widżetami systemu Windows. Oczywiście może to być zarówno dobra, jak i zła rzecz!
Danny Tuppeny
3
Zdecydowanie zła rzecz. WPF zapoczątkował erę całkowicie nienatywnych interfejsów. Trudne do zrozumienia i jeszcze trudniejsze do oglądania. To, co jedna osoba uważa za piękną, jest najgorszym koszmarem drugiej osoby. Pozostawienie „skórowania” wbudowanym kontrolkom systemu operacyjnego to fantastyczny sposób na zadowolenie wszystkich. Z drugiej strony odmawiam używania najnowszych wersji pakietu Office, ponieważ nie mogę znieść interfejsu. Więc, zejdź z trawnika i takie tam.
Cody Gray
1
Powiedziałbym, że to trochę subiektywne. Prawdopodobnie nie chciałbym, aby mój Word Pocessor złamał wszystkie te reguły, ale niektóre programy mogą sobie z tym poradzić. Na przykład. jednym z najlepszych przykładów WPF, jaki pamiętam, był Yahoo - dla mnie to duża poprawa w aplikacji opartej na widgetach
Danny Tuppeny