# .NET MAUI en 2026 : Développement Cross-Platform et Questions d'Entretien > Tutoriel .NET MAUI pour 2026 : créer des applications cross-platform avec .NET 10, handlers, MVVM, HybridWebView. Questions d'entretien avec réponses détaillées. - Published: 2026-06-01 - Updated: 2026-06-01 - Author: SharpSkill - Tags: .net maui, cross-platform, tutoriel, entretien, migration xamarin, .net 10, développement mobile - Reading time: 11 min --- .NET MAUI (Multi-platform App UI) s'est imposé comme un framework cross-platform de qualité production avec .NET 10. Publié en tant que version Long-Term Support maintenue jusqu'en novembre 2028, .NET MAUI 10 est distribué sous forme de workload et de packages NuGet, offrant une qualité, des performances et de nouvelles API améliorées telles que les évolutions de HybridWebView et SafeAreaEdges. Ce tutoriel couvre la création d'une application cross-platform, l'architecture qui fait fonctionner MAUI, et les questions d'entretien que les recruteurs posent en 2026. > **.NET MAUI 10 LTS** > > .NET 10 est une version Long-Term Support (maintenue jusqu'en novembre 2028). MAUI 10 privilégie la qualité et les performances plutôt que l'ajout de nouveaux contrôles UI — ce qui en fait la version la plus stable de MAUI à ce jour. Le framework est désormais distribué en tant que workload .NET et packages NuGet, permettant le verrouillage de version par projet. ## Mise en Place d'un Projet .NET MAUI 10 de Zéro Le chemin le plus rapide vers une application MAUI fonctionnelle commence avec la CLI .NET. .NET 10 introduit un template de projet mis à jour qui inclut les configurations par défaut d'Aspire, connectant la télémétrie et la découverte de services nativement. ```bash # Installer le workload MAUI (si pas déjà présent) dotnet workload install maui # Créer une nouvelle application MAUI dotnet new maui -n CrossPlatformDemo cd CrossPlatformDemo # Exécuter sur un émulateur Android dotnet build -t:Run -f net10.0-android ``` La structure mono-projet consolide le code spécifique à chaque plateforme dans un dossier `Platforms/` tout en partageant le reste. Le fichier `MauiProgram.cs` sert de racine de composition — c'est là que les services, polices et handlers sont enregistrés. ```csharp // MauiProgram.cs using Microsoft.Extensions.Logging; public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); }); // Register services for dependency injection builder.Services.AddSingleton(); builder.Services.AddTransient(); #if DEBUG builder.Logging.AddDebug(); #endif return builder.Build(); } } ``` L'injection de dépendances dans MAUI suit le même modèle qu'ASP.NET Core. Les services Singleton persistent pendant toute la durée de vie de l'application, les services Transient sont créés à chaque demande, et les services Scoped — bien que disponibles — nécessitent de la prudence car MAUI ne dispose pas d'un concept de scope intégré comme les requêtes HTTP. ## Handlers : L'Architecture Derrière le Rendu Cross-Platform MAUI a remplacé les renderers de Xamarin.Forms par une architecture de handlers. Les handlers associent chaque contrôle cross-platform à son équivalent natif via une fine couche d'abstraction. La différence clé : les handlers sont sans état et découplés de la vue virtuelle, ce qui les rend plus rapides et plus faciles à personnaliser. ```csharp // CustomEntryHandler.cs — Customizing the Entry control on Android using Microsoft.Maui.Handlers; public class CustomEntryHandler : EntryHandler { protected override void ConnectHandler(MauiAppCompatEditText platformView) { base.ConnectHandler(platformView); // Remove the default underline on Android platformView.SetBackgroundColor(Android.Graphics.Color.Transparent); } } // Register in MauiProgram.cs builder.ConfigureMauiHandlers(handlers => { handlers.AddHandler(); }); ``` Dans .NET 10, les contrôles Android Entry et Editor sont passés de `AppCompatEditText` à `MauiAppCompatEditText`, ajoutant la prise en charge native de l'événement `SelectionChanged`. Les handlers améliorés pour CollectionView et CarouselView introduits dans .NET 9 sont désormais les handlers par défaut sur iOS et Mac Catalyst, résolvant des problèmes de stabilité de longue date. ## MVVM avec CommunityToolkit.Mvvm : Éliminer le Code Répétitif Le générateur de code source [CommunityToolkit.Mvvm](https://learn.microsoft.com/en-us/dotnet/communitytoolkit/mvvm/) élimine environ 80 % de la cérémonie MVVM. Plus besoin d'implémentation manuelle de `INotifyPropertyChanged`, plus de wrappers de commandes — les attributs pilotent la génération de code. ```csharp // MainViewModel.cs using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; public partial class MainViewModel : ObservableObject { private readonly IApiService _apiService; public MainViewModel(IApiService apiService) { _apiService = apiService; } // Source generator creates the 'Title' property with change notification [ObservableProperty] private string _title = string.Empty; // Source generator creates the 'IsLoading' property [ObservableProperty] private bool _isLoading; // Source generator creates an async ICommand [RelayCommand] private async Task LoadDataAsync() { IsLoading = true; try { Title = await _apiService.FetchTitleAsync(); } finally { IsLoading = false; } } } ``` Le XAML se lie directement aux propriétés et commandes générées : ```xml