# Лекция: Разработка приложения "Меню ресторана" на .NET MAUI ## Введение в .NET MAUI **.NET MAUI** (Multi-platform App UI) - это кроссплатформенный фреймворк для создания нативных мобильных и десктопных приложений. Основные компоненты: >XAML - язык разметки для создания UI > >C# - бизнес-логика > >MVVM (Model-View-ViewModel) - архитектурный паттерн > >Библиотеки - для работы с сетью, БД и т.д. **Поддерживаемые платформы** * Мобильные: iOS, Android * Десктоп: Windows (WinUI), macOS (Catalyst) * В будущем: Linux (в разработке) **Ключевые особенности** * Единая кодовая база на C# * Использование XAML для UI * Доступ к нативным API платформ * Горячая перезагрузка (Hot Reload) * Встроенная поддержка MVVM **.NET MAUI** представляет собой мощную эволюцию кроссплатформенных инструментов Microsoft, сочетающую в себе: * Многолетний опыт Xamarin * Мощь современного .NET * Гибкость кроссплатформенной разработки * Производительность нативных приложений Это технология, которая позволяет создавать по-настоящему нативные приложения с экономией времени и ресурсов, что делает ее отличным выбором для современных мобильных и десктопных проектов. ## Оснавная структура страницы ```xml ``` ## Создание модели данных Создаем класс **Product.cs** для работы с данными из API: ```cs public class Product { public int id { get; set; } public string title { get; set; } public decimal price { get; set; } public int Quantity { get; set; } } ``` **Объяснение:** Базовые свойства соответствуют полям из API >Проверить данные , которые находятся в api можно на сайте https://reqbin.com/ ![](./img/1.jpg) Инициализация в `MainPage`: ```cs public partial class MainPage : ContentPage { public ObservableCollection MenuProducts { get; } = new(); public MainPage() { InitializeComponent(); BindingContext = this; } } ``` ## Загрузка и отображение продуктов Метод загрузки: ```cs private async void LoadMenu() { try { using var client = new HttpClient(); var json = await client.GetStringAsync("https://restaurant.kolei.ru"); var products = JsonSerializer.Deserialize>(json); foreach (var p in products) { MenuProducts.Add(p); } } catch (Exception ex) { await DisplayAlert("Ошибка", ex.Message, "OK"); } } ``` Вызываем в конструкторе: ```cs public MainPage() { InitializeComponent(); BindingContext = this; LoadMenu(); // Добавляем вызов загрузки } ``` ## Добавление кнопок управления количества ```xml