Le développeur C# WPF en entretien, du binding MVVM au déploiement MSIX

Un développeur .NET desktop construit ou maintient des applications Windows en WPF, parfois en WinForms, reliées à une base, à des services internes ou à du matériel. Le poste repose sur le binding, MVVM et le thread d'interface, que la plupart des développeurs web .NET ne pratiquent pas.

Recevoir la fiche complète

Mis à jour le Par l'équipe Delectus5 min de lecture

La fiche Développeur C# WPF / WinForms : technologies, chaîne du poste, une question et la grille d'évaluation

Écrans de saisie, outils de supervision, logiciels qui pilotent un appareil ou affichent des mesures en temps réel : un développeur C# WPF travaille le plus souvent sur des applications installées sur les postes. Le code a souvent dix ans ou plus, avec des parties en WinForms, du WCF côté serveur et une base SQL Server ou Oracle. Une part du travail consiste à faire passer cet existant sur .NET 8 ou .NET 10 sans casser ce qui marche.

Faire du WPF sans MVVM reste courant chez les candidats : du code dans le code-behind, des contrôles manipulés par leur nom, des appels réseau sur le thread d'interface qui figent la fenêtre. Un profil solide parle de binding et d'INotifyPropertyChanged, de commandes, de Dispatcher, de fuites mémoire dues aux abonnements d'événements, et de la façon dont l'application s'installe et se met à jour sur des centaines de postes.

Regardez aussi la cible du poste. Il peut rester sur WPF, aller vers WinUI 3 ou .NET MAUI, ou vers Avalonia pour sortir de Windows. Prism, courant dans les grosses applications modulaires, demande une licence commerciale aux grandes organisations depuis la version 9. Le PDF compte 30 questions, un cas de 20 minutes et une grille de 1 à 4.

WPF, WinForms et les briques d'une application de bureau .NET

WPF et XAML

Le framework d'interface de bureau de Microsoft, toujours livré avec .NET 8, 9 et 10, pour Windows uniquement. Les écrans s'écrivent en XAML, un langage de balisage, et le rendu passe par DirectX. Styles, modèles de contrôles et ressources changent l'apparence sans toucher au code.

Data binding et MVVM

Le binding relie une propriété d'un écran à une propriété d'un objet de données. MVVM sépare la vue (XAML), le ViewModel (état et commandes de l'écran) et le modèle. Bien appliqué, il rend les écrans testables sans les afficher. Commencez l'évaluation par là.

CommunityToolkit.Mvvm et Prism

CommunityToolkit.Mvvm, publié par Microsoft, génère à la compilation le code répétitif de MVVM avec des attributs comme [ObservableProperty] et [RelayCommand]. Prism ajoute navigation par régions, modules et injection de dépendances pour les grosses applications. Depuis Prism 9, sa licence est double, gratuite ou commerciale selon l'organisation.

WinForms

L'ancien framework de fenêtres, toujours pris en charge sur .NET moderne et très présent dans les applications anciennes. On y place les contrôles avec un concepteur visuel et on écrit le code dans les gestionnaires d'événements. .NET 9 a ajouté Control.InvokeAsync et des méthodes asynchrones pour afficher les formulaires.

Thread d'interface et Dispatcher

Une fenêtre WPF ou WinForms ne se modifie que depuis le thread qui l'a créée. Un traitement long sur ce thread fige l'application ; une mise à jour depuis un autre thread lève une exception. async/await, le Dispatcher en WPF et Invoke en WinForms règlent le problème quand ils sont bien utilisés.

WinUI 3, .NET MAUI et Avalonia

Les suites possibles. WinUI 3, livré avec le Windows App SDK, est l'interface native récente de Windows. .NET MAUI vise Windows, Android, iOS et macOS avec un même code. Avalonia, open source, reprend un XAML proche de WPF et tourne sur Windows, Linux et macOS. Le choix dépend des plateformes visées et du code existant.

Déploiement : MSIX, ClickOnce, installeurs

Une application de bureau s'installe et se met à jour sur chaque poste. ClickOnce reste disponible en .NET moderne, MSIX est le format de paquet récent de Windows, et beaucoup d'équipes produisent un MSI avec WiX ou utilisent Velopack pour les mises à jour automatiques. Demandez comment la dernière version est arrivée chez les utilisateurs.

Interopérabilité : P/Invoke, COM, matériel

Les applications de bureau appellent souvent des DLL natives, des composants COM (Excel, logiciels tiers) ou du matériel par port série, USB ou SDK de constructeur. P/Invoke et l'interop COM demandent de gérer la mémoire non managée et l'architecture x86 ou x64. Un point à vérifier seulement si le poste le demande.

Deux situations reviennent. La plus fréquente est la maintenance d'une application existante, parfois encore sur .NET Framework 4.8, avec du code-behind, des composants tiers (DevExpress, Telerik, Syncfusion) et une base partagée : il faut corriger sans régression et migrer par étapes. L'autre est une application nouvelle ou réécrite en WPF moderne, avec MVVM, injection de dépendances et ViewModels testés. Dans les deux cas, l'application tourne sur des postes que l'équipe ne maîtrise pas toujours, avec des versions de Windows différentes, des droits d'installation limités, des écrans haute résolution, un antivirus et un proxy d'entreprise.

À vérifier chez un développeur client lourd

  • XAML, binding et MVVM
  • Thread d'interface et programmation asynchrone
  • Rendu, virtualisation et fuites mémoire
  • Maintenance WinForms et migration .NET
  • Architecture testable et accès aux données
  • Déploiement et interopérabilité Windows

Les questions techniques à poser à un développeur WPF

Chaque question vient avec ce qu'une bonne réponse contient et le signal qui doit vous alerter. Pas besoin d'être technique pour les poser : écoutez si le candidat raconte du vécu.

  1. Question 1 · junior à confirmé

    Une propriété du ViewModel change, mais l'écran ne se met pas à jour. Que vérifiez-vous ?

    Une bonne réponseQue le ViewModel implémente INotifyPropertyChanged et lève PropertyChanged avec le bon nom de propriété (nameof, ou [ObservableProperty] du CommunityToolkit), que le DataContext est celui attendu, que le mode du binding convient (OneWay, TwoWay, OneTime) et que la fenêtre Sortie de Visual Studio n'affiche pas d'erreur de binding. Pour une liste, une ObservableCollection, sinon les ajouts n'apparaissent pas. La personne cite l'arborescence visuelle en direct ou la fenêtre des échecs de liaison de Visual Studio.

    Signal d'alerteUn rafraîchissement forcé de la vue depuis le code-behind, ou un DataContext recréé à chaque changement.

  2. Question 2 · confirmé

    Un bouton lance un chargement de 10 secondes et la fenêtre se fige. Comment corrigez-vous, et comment affichez-vous la progression ?

    Une bonne réponseUne commande asynchrone (AsyncRelayCommand du toolkit) qui attend un appel réellement asynchrone pour les entrées-sorties, ou Task.Run pour du calcul, afin de libérer le thread d'interface. La progression passe par IProgress<T>, dont le rappel s'exécute sur le thread d'interface, ou par une propriété liée mise à jour après chaque await. Le bouton est désactivé pendant l'exécution et l'annulation passe par un CancellationToken.

    Signal d'alerteApplication.DoEvents, Thread.Sleep dans une boucle, ou .Result sur la tâche dans le gestionnaire du clic.

  3. Question 3 · confirmé

    Une liste de 50 000 lignes met plusieurs secondes à s'afficher et le défilement saccade. Que regardez-vous ?

    Une bonne réponseLa virtualisation : un VirtualizingStackPanel qui ne crée que les lignes visibles, et ce qui la désactive (la liste placée dans un ScrollViewer, le regroupement sans IsVirtualizingWhenGrouping, CanContentScroll à false). Le mode de recyclage des conteneurs, des modèles de ligne légers, pas de convertisseur coûteux à chaque ligne. Côté données, de la pagination ou un chargement progressif. Le profileur de Visual Studio confirme où passe le temps.

    Signal d'alerteLes 50 000 lignes dans un StackPanel, ou une ListBox posée dans un ScrollViewer, sans savoir ce qu'est la virtualisation.

  4. Question 4 · confirmé

    Comment testez-vous la logique d'un écran WPF sans l'afficher ?

    Une bonne réponseLa logique vit dans le ViewModel, qui ne connaît pas la vue. Les tests unitaires (xUnit, NUnit, MSTest) l'instancient avec des services simulés (Moq, NSubstitute), exécutent les commandes et vérifient les propriétés et les notifications. Les boîtes de dialogue et la navigation passent par des interfaces injectées. Les tests d'interface automatisés (FlaUI, Appium) restent limités à quelques parcours.

    Signal d'alerte« Le WPF ne se teste pas », ou des ViewModels qui ouvrent eux-mêmes des MessageBox.

  5. Question 5 · confirmé

    Comment livrez-vous une nouvelle version d'une application WPF à 300 postes, et comment gérez-vous les mises à jour ?

    Une bonne réponseUne publication .NET dépendante du runtime ou autonome (self-contained), puis un format adapté : ClickOnce ou MSIX avec mise à jour automatique, un MSI construit avec WiX et déployé par Intune ou Configuration Manager, ou Velopack pour des mises à jour en arrière-plan. La personne parle de la signature du code, des droits administrateur nécessaires ou non, de la version du runtime présente sur les postes et du retour à la version précédente.

    Signal d'alerteCopier le dossier bin sur un partage réseau et demander aux utilisateurs de le recopier.

Recevez la fiche d'entretien complète en PDF

La fiche pour mener l'entretien de bout en bout, prête à imprimer ou à partager avec le manager.

  • 30 questions sur 6 axes, avec la bonne réponse, le signal d'alerte et la relance
  • Le niveau visé pour chaque question
  • Une mise en situation de 20 minutes et ce qu'on attend du candidat
  • La grille d'évaluation de 1 à 4, axe par axe

Profils WPF et WinForms : les questions des recruteurs

WPF reste-t-il un choix sérieux pour une application en 2026 ?

Pour une application Windows de gestion ou de supervision, oui. WPF est livré avec chaque version de .NET, dont .NET 10, et Microsoft continue de le maintenir. WinUI 3 vise les applications Windows récentes, .NET MAUI le mobile et le bureau avec un même code, Avalonia le bureau sur Windows, Linux et macOS. Un développeur WPF passe assez vite à Avalonia ou à WinUI, car le XAML et MVVM y restent proches.

Un développeur WinForms peut-il prendre un poste WPF ?

Il connaît C#, les événements et la vie d'une application installée, ce qui compte. Il lui manque souvent le binding, les templates et MVVM, qui demandent une autre façon de penser un écran. En entretien, demandez-lui de transformer un formulaire écrit en code-behind en ViewModel avec des commandes. S'il sépare spontanément l'état de l'affichage, l'adaptation ira vite. S'il cherche les contrôles par leur nom, prévoyez une formation.

Comment construire un test technique pour un développeur WPF ?

Donnez une petite application qui fige au chargement, avec du code dans le code-behind et une liste qui ne se met pas à jour. Demandez de la corriger en 45 minutes en passant par un ViewModel. Vous voyez le binding, l'async et la structure du code en une seule séance. Faites commenter à voix haute pour suivre la recherche de la cause.

Junior, confirmé, senior : qu'attendre d'un développeur WPF ?

Un junior écrit un écran en XAML avec binding et commandes, sans bloquer le thread d'interface. Un confirmé structure l'application en MVVM avec injection de dépendances, teste ses ViewModels, accélère une liste lente et livre une version. Un senior migre un existant WinForms ou .NET Framework, trouve une fuite mémoire, gère l'interop native et choisit la cible (WPF, WinUI, Avalonia). La grille Delectus AI du PDF reprend ces niveaux sur six axes.

Pour structurer vos autres entretiens, consultez aussi nos pages sur les questions d'entretien de recrutement, la méthode de l'entretien structuré et la grille d'évaluation d'entretien.

Les fiches voisines

Toutes les fiches →

Voyez Delectus sur vos propres offres.

Commencez gratuitement. Passez à l'échelle quand vous êtes prêt.

Demander une démo

Votre ATS, connecté à Delectus

  • Workable
  • Teamtailor
  • iCIMS
  • Lever
  • SmartRecruiters
  • Jobvite
  • Greenhouse
  • Pinpoint