# .NET MAUI en 2026: Desarrollo Multiplataforma y Preguntas de Entrevista > Tutorial de .NET MAUI para 2026: desarrollo de aplicaciones multiplataforma con .NET 10, handlers, MVVM, HybridWebView. Incluye preguntas de entrevista con respuestas detalladas. - Published: 2026-06-01 - Updated: 2026-06-01 - Author: SharpSkill - Tags: .net maui, multiplataforma, tutorial, entrevista, migración xamarin, .net 10, desarrollo móvil - Reading time: 11 min --- .NET MAUI (Multi-platform App UI) se ha consolidado como un framework multiplataforma de grado producción con .NET 10. Lanzado como una versión Long-Term Support con soporte hasta noviembre de 2028, .NET MAUI 10 se distribuye como workload y paquetes NuGet, ofreciendo mejoras en calidad, rendimiento y nuevas APIs como las optimizaciones de HybridWebView y SafeAreaEdges. Este tutorial cubre la construcción de una aplicación multiplataforma, la arquitectura que hace funcionar a MAUI, y las preguntas de entrevista que los equipos de contratación formulan en 2026. > **.NET MAUI 10 LTS** > > .NET 10 es una versión Long-Term Support (con soporte hasta noviembre de 2028). MAUI 10 prioriza la calidad y el rendimiento por encima de nuevos controles de UI — convirtiéndola en la versión más estable de MAUI hasta la fecha. Ahora se distribuye como workload de .NET y paquetes NuGet, permitiendo el versionado fijo por proyecto. ## Configuración de un Proyecto .NET MAUI 10 desde Cero El camino más rápido hacia una aplicación MAUI funcional comienza con la CLI de .NET. .NET 10 introduce una plantilla de proyecto actualizada que incluye las configuraciones predeterminadas de .NET Aspire, conectando telemetría y descubrimiento de servicios de forma nativa. ```bash # Instalar el workload MAUI (si no está presente) dotnet workload install maui # Crear una nueva aplicación MAUI dotnet new maui -n CrossPlatformDemo cd CrossPlatformDemo # Ejecutar en el emulador Android dotnet build -t:Run -f net10.0-android ``` La estructura de proyecto único consolida el código específico de cada plataforma en una carpeta `Platforms/` mientras comparte el resto. El archivo `MauiProgram.cs` sirve como raíz de composición — aquí es donde se registran los servicios, fuentes y handlers. ```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(); } } ``` La inyección de dependencias en MAUI sigue el mismo patrón que ASP.NET Core. Los servicios Singleton persisten durante toda la vida de la aplicación, los servicios Transient se crean por cada solicitud, y los servicios Scoped — aunque disponibles — requieren precaución porque MAUI no tiene un concepto de scope integrado como las solicitudes HTTP. ## Handlers: La Arquitectura Detrás del Renderizado Multiplataforma MAUI reemplazó los renderers de Xamarin.Forms con una arquitectura de handlers. Los handlers mapean cada control multiplataforma a su contraparte nativa mediante una capa de abstracción delgada. La diferencia clave: los handlers son sin estado y están desacoplados de la vista virtual, lo que los hace más rápidos y fáciles de personalizar. ```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(); }); ``` En .NET 10, los controles de Entry y Editor en Android pasaron de `AppCompatEditText` a `MauiAppCompatEditText`, agregando soporte nativo para el evento `SelectionChanged`. Los handlers mejorados de CollectionView y CarouselView introducidos en .NET 9 son ahora los predeterminados en iOS y Mac Catalyst, resolviendo problemas de estabilidad que existían desde hace tiempo. ## MVVM con CommunityToolkit.Mvvm: Eliminando el Código Repetitivo El generador de código fuente [CommunityToolkit.Mvvm](https://learn.microsoft.com/en-us/dotnet/communitytoolkit/mvvm/) elimina aproximadamente el 80% de la ceremonia MVVM. Sin implementaciones manuales de `INotifyPropertyChanged`, sin wrappers de comandos — los atributos dirigen la generación de código. ```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; } } } ``` El XAML se enlaza directamente a las propiedades y comandos generados: ```xml