Что такое .NET MAUI
.NET MAUI (Multi-platform App UI) — это фреймворк для создания нативных приложений для iOS, Android, macOS и Windows с единой codebase.
Создание проекта
1dotnet new maui -n MyApp2cd MyApp3dotnet build
Структура проекта
XAML страницы
▸MainPage.xaml
1<?xml version="1.0" encoding="utf-8" ?>2<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"3 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"4 x:Class="MyApp.MainPage">56 <VerticalStackLayout Spacing="25" Padding="30,0">7 <Label Text="Hello, World!"8 FontSize="32"9 HorizontalOptions="Center" />1011 <Entry Placeholder="Enter your name"12 x:Name="NameEntry" />1314 <Button Text="Click Me"15 Clicked="OnButtonClicked"16 HorizontalOptions="Center" />1718 <CollectionView x:Name="ItemsCollection">19 <CollectionView.ItemTemplate>20 <DataTemplate>21 <Label Text="{Binding Name}" />22 </DataTemplate>23 </CollectionView.ItemTemplate>24 </CollectionView>25 </VerticalStackLayout>2627</ContentPage>
▸Code-behind
1public partial class MainPage : ContentPage2{3 public MainPage()4 {5 InitializeComponent();6 }78 private async void OnButtonClicked(object? sender, EventArgs e)9 {10 var name = NameEntry.Text;11 await DisplayAlert("Hello", $"Hello, {name}!", "OK");12 }13}
Навигация
▸Shell Navigation
1<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"2 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"3 x:Class="MyApp.AppShell">45 <ShellContent Title="Home"6 ContentTemplate="{DataTemplate local:MainPage}" />78 <ShellContent Title="Settings"9 ContentTemplate="{DataTemplate local:SettingsPage}" />10</Shell>
▸Программная навигация
1await Shell.Current.GoToAsync("//settings");2await Navigation.PushAsync(new DetailPage(item));
Данные и привязки
▸MVVM
1public class MainViewModel : INotifyPropertyChanged2{3 private string _name = string.Empty;45 public string Name6 {7 get => _name;8 set9 {10 _name = value;11 OnPropertyChanged();12 OnPropertyChanged(nameof(Greeting));13 }14 }1516 public string Greeting => $"Hello, {Name}!";1718 public event PropertyChangedEventHandler? PropertyChanged;1920 protected void OnPropertyChanged([CallerMemberName] string? name = null)21 {22 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));23 }24}
Сервисы и зависимость
1// MauiProgram.cs2public static class MauiProgram3{4 public static MauiApp CreateMauiApp()5 {6 var builder = MauiApp.CreateBuilder();78 builder.Services.AddSingleton<IMyService, MyService>();9 builder.Services.AddTransient<MainViewModel>();1011 return builder.Build();12 }13}
Платформо-специфичный код
1// Platforms/Android/MainApplication.cs2#if ANDROID3[Application]4public class MainApplication : MauiApplication5{6 public MainApplication(IntPtr handle, JniHandleOwnership ownership)7 : base(handle, ownership) { }89 protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();10}11#endif
Сборка и публикация
1# Android2dotnet build -t:Run -f net8.0-android34# iOS (требуется Mac)5dotnet build -t:Run -f net8.0-ios67# Windows8dotnet build -t:Run -f net8.0-windows10.0.19041.0910# Публикация11dotnet publish -f net8.0-android -c Release
Заключение
.NET MAUI позволяет создавать кроссплатформенные приложения с единой codebase. XAML для UI, C# для логики и полная интеграция с .NET экосистемой делают его мощным инструментом для мобильной и десктопной разработки.