web-dev-qa-db-fra.com

Convertir une application Winform en application WPF

J'ai un petit programme que j'ai fait avec WinForms et maintenant je veux le faire à nouveau en utilisant WPF. 

Je suis nouveau dans WPF et j'ai lu que, quoi que vous puissiez faire avec XAML, vous pouvez également vous en passer, c'est-à-dire utiliser uniquement du code. 

Bien entendu, vous n’avez pas de code XAML lorsque vous utilisez Winforms. Puis-je utiliser le même code pour l'application WPF que pour l'application Winforms et obtenir le même résultat? Ou dois-je créer et éditer du XAML? Quels sont les avantages d'utiliser ou de ne pas utiliser XAML? 

De plus, compte tenu de l'expérience passée avec Winforms, devrais-je modifier quelque peu ma conception de la conception et de la mise en œuvre qui fonctionnent pour Winforms, mais qui ne sont pas appropriés pour WPF?

13
Yonatan Nir

Non, vous ne pouvez pas réutiliser le code des winforms dans WPF.

et même si vous le pouviez, vous ne devriez pas.

tout ce que vous pouvez faire avec XAML, vous pouvez aussi vous en passer

Vous devez vraiment utiliser XAML pour définir l'interface utilisateur, puis utiliser DataBinding et MVVM , qui est un moyen de développement beaucoup plus professionnel que l'approche de winforms procédurale traditionnelle.

Ne pas utiliser XAML est beaucoup plus gênant que de l’utiliser. Cela peut paraître intimidant au début, mais c'est une chose vraiment géniale de travailler avec.

Bien sûr, vous n'avez pas de code XAML lorsque vous utilisez Winforms

Non bien sûr que non. Winforms est une technologie très ancienne qui ne supporte rien. C'est la raison pour laquelle ils ont créé le concepteur Visual Studio, sinon personne n'aurait jamais utilisé winforms pour quoi que ce soit, à cause de la quantité de code gigantesque et gigantesque nécessaire pour faire quelque chose d'utile.

Puis-je utiliser le même code pour l'application WPF que pour le fichier application Winforms et obtenir le même résultat?

Probablement, en adaptant certains noms de classe et ainsi de suite, mais vous perdez alors le principal avantage fourni par WPF, qui consiste précisément à se débarrasser de l’horrible code de type winforms.

compte tenu de l'expérience passée avec Winforms, devrais-je en quelque sorte changer la façon dont je pense à la conception et la mise en œuvre que travaillé pour Winforms mais ne convient-il pas à WPF?

Oui. WPF prend en charge MVVM, ce qui nécessite une mentalité vraiment différente de l’approche traditionnelle de winforms.

Je recommande fortement de lire l'excellent post de Rachel sur la mise à niveau de winforms vers WPF.

25

J'ai essayé de convertir directement une application Winforms en WPF, ce qui cause beaucoup plus de problèmes que nécessaire, car vous vous battez constamment contre le framework. Lisez sur MVVM et la liaison de données et utilisez-le. C'est ce sur quoi WPF est conçu et présente plusieurs avantages, tels que la testabilité. Quelques concepts simples (liaison de données, modèles de vue, etc.) peuvent vous permettre de développer vos connaissances au fur et à mesure, mais je recommanderais d'abord de comprendre MVVM et la liaison de données dans WPF. 

MVVMLight est un bon cadre pour commencer, mais il vaut la peine d'écrire les bases sans un cadre permettant de savoir comment les choses fonctionnent en premier. 

Je crois me souvenir que c’est un bon ensemble de messages de Reed Copsey: http://reedcopsey.com/series/windows-forms-to-mvvm/

2
gmn

En fait, cela dépend de la complexité de votre projet. Pour un assez petit projet, vous pouvez faire cette "conversion" tout simplement. Mais ce n'est pas une bonne pratique, même parce que le développement de WPF est souvent basé sur MVVM/Prism et qu'ils vous offrent de nombreux avantages ..__ également.

1
Rinat Galyautdinov

Essayer de créer des contrôles WPF sans XAML, c'est poser des problèmes - l'ensemble de la structure est construite autour du modèle MVVM, qui exige que votre vue soit décrite de manière déclarative plutôt que procédurale. Bien que vous puissiez vraiment créer les mêmes objets d'interface utilisateur en C # et XAML, vous devez savoir (avec des détails vraiment insoutenables) comment le cadre fonctionne pour compenser le changement d'état de votre interface utilisateur. D'un autre côté, si vous le faites en XAML (comme WPF le dicte, vous êtes censé le faire), les choses sont généralement mises à jour correctement et sans qu'il soit nécessaire de résoudre des bugs sans fin. En bref "oui" vous pouvez le faire en code, mais "non" vous ne pouvez pas le faire en code sans perdre votre santé mentale.

1
Andrew

Je vais 2ème ou 3ème ou 4ème les autres réponses. Jamais, jamais, jamais, jamais, jamais essayer de construire une application WPF avec du code "style Winforms". Je l'ai fait sur ma toute première application WPF et ce fut la plus grosse erreur de ma vie. Quel gâchis gigantesque. La deuxième application, je suis allé à mi-chemin vers MVVM et c'était aussi un gâchis gigantesque. 3ème application et depuis que je suis 100% MVVM, DI, etc. et 100% selon le livre WPF, le code est très propre.

Il est inutile de porter le code Winforms à WPF. La majorité du code que vous avez écrit dans Winforms est jeté lorsque vous utilisez WPF. Fondamentalement, le seul élément portable est la logique métier. Toute la logique de l'interface utilisateur est complètement différente.

Et vous nous remercierez plus tard, car l'un des plus grands concepts de WPF à ce jour est la séparation de l'interface utilisateur et de la logique métier. Cela rend l'échange de contrôle un morceau de gâteau.

0
SledgeHammer