Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
Анимация с использованием дискретных ключевых кадров
Роль стилей WPF
Определение и применение стиля
Переопределение настроек стиля
Влияние атрибута TargetType на стили
Создание подклассов существующих стилей
Определение стилей с триггерами
Определение стилей с множеством триггеров
Стили с анимацией
Применение стилей в коде
Логические деревья, визуальные деревья и стандартные шаблоны
Программное инспектирование логического дерева
Программное инспектирование визуального дерева
Программное инспектирование стандартного шаблона элемента управления
Построение шаблона элемента управления с помощью инфраструктуры триггеров
Шаблоны как ресурсы
Встраивание визуальных подсказок с использованием триггеров
Роль расширения разметки {TemplateBinding}
Роль класса ContentPresenter
Встраивание шаблонов в стили
Резюме
Глава 28
Введение в паттерн MWM
Модель
Представление
Модель представления
Анемичные модели или анемичные модели представлений
Система уведомлений привязки WPF
Наблюдаемые модели и коллекции
Добавление привязок и данных
Изменение данных об автомобиле в коде
Наблюдаемые модели
Использование операции nameof
Наблюдаемые коллекции
Использование класса ObservableCollection<T>
Реализация флага изменения
Обновление источника через взаимодействие с пользовательским интерфейсом
Итоговые сведения об уведомлениях и наблюдаемых моделях
Проверка достоверности WPF
Модификация примера для демонстрации проверки достоверности
Класс Validation
Варианты проверки достоверности
Уведомление по исключениям
Интерфейс IDataErrorInfo
Интерфейс INotifyDataErrorInfo
Реализация поддерживающего кода
Использование интерфейса INotifyDataErrorInfo для проверки достоверности
Комбинирование IDataErrorInfo С INotifyDataErrorInfo для проверки достоверности
Отображение всех ошибок
Перемещение поддерживающего кода в базовый класс
Использование аннотаций данных в WPF
Добавление аннотаций данных к модели
Контроль ошибок проверки достоверности на основе аннотаций данных
Настройка свойства ErrorTemplate
Итоговые сведения о проверке достоверности
Создание специальных команд
Реализация интерфейса ICommand
Добавление класса ChangeColorCommand
Присоединение команды к CommandManager
Изменение файла MainWindow.xaml.cs
Изменение файла MainWindow.xaml
Тестирование приложения
Создание класса CommandBase
Добавление класса AddCarCommand
Изменение файла MainWindow.xaml.cs
Изменение файла MainWindow.xaml
Изменение класса ChangeColorCommand
Объекты RelayCommand
Создание базового класса RelayCommand
Создание класса RelayCommand<T>
Изменение файла MainWindow.xaml.cs
Добавление и реализация кнопки удаления записи об автомобиле
Итоговые сведения о командах
Перенос кода и данных в модель представления
Перенос кода MainWindow.xaml.cs
Обновление кода и разметки MainWindow
Обновление разметки элементов управления
Итоговые сведения о моделях представлений
Обновление проекта AutoLot.Dal для MWM
Резюме
Часть IX
Глава 29
Краткий экскурс в прошлое
Введение в паттерн MVC
Модель
Представление
Контроллер
ASP.NET Core и паттерн MVC
ASP.NET Core и .NET Core
Одна инфраструктура, много сценариев использования
Функциональные средства ASP.NET Core из MVC/Web API
Соглашения по конфигурации
Соглашения об именовании
Структура каталогов
Папка Controllers
Папка Views
Папка Shared
Папка wwwroot (нововведение в ASP.NET Core)
Контроллеры и действия
Класс Controller
Класс ControllerBase
Действия
Привязка моделей
Словарь ModelState
Добавление специальных ошибок в словарь ModelState
Неявная привязка моделей
Явная привязка моделей
Атрибут Bind
Управление источниками привязки моделей в ASP.NET Core
Проверка достоверности моделей
Маршрутизация
Шаблоны URL и маркеры маршрутов
Маршрутизация и REST-службы ASP.NET Core
Маршрутизация на основе соглашений
Именованные маршруты
Маршрутизация с помощью атрибутов
Именованные маршруты
Маршрутизация и методы HTTP
Методы HTTP при маршрутизации в веб-приложениях (MVC)
Маршрутизация для служб API
Перенаправление с использованием маршрутизации
Фильтры
Фильтры авторизации
Фильтры ресурсов
Фильтры действий
Фильтры исключений
Фильтры результатов
Нововведения в ASP.NET Core
Встроенное внедрение зависимостей
Осведомленность о среде
Выяснение среды времени выполнения
Конфигурация приложений
Извлечение настроек
Развертывание приложений ASP.NET Core
Легковесный и модульный конвейер запросов HTTP
Создание и конфигурирование решения
Использование Visual Studio
Создание решения и проектов
Добавление проектов AutoLot.Models и AutoLot.Dal
Добавление ссылок на проекты
Добавление пакетов NuGet
Использование командной строки
Запуск приложений ASP.NET Core
Конфигурирование настроек запуска
Использование Visual Studio
Использование командной строки или окна терминала Visual Studio Code
Изменение кода во время отладки
Использование Visual Studio Code
Изменение кода во время отладки
Отладка приложений ASP.NET Core
Присоединение с помощью Visual Studio
Присоединение с помощью Visual Studio Code
Обновление портов AutoLot.Api
Создание и конфигурирование экземпляра WebHost
Файл Program.cs
Файл Startup.cs
Доступные службы для класса Startup
Конструктор
Метод ConfigureServices()
AutoLot.Api
Добавление строки подключения к настройкам приложения
AutoLot.Mvc
Добавление строки подключения к настройкам приложения
Метод Configure()
AutoLot.Api
AutoLot.Mvc
Ведение журнала
Интерфейс IAppLogging
Класс AppLogging
Конфигурация ведения журнала
Обновление настроек приложения
Обновление Program.cs
Обновление Startup.cs
Обновление контроллера
Испытание инфраструктуры ведения журнала
Резюме
Глава 30
Введение в REST-службы ASP.NET Core
Создание действий контроллера с использованием служб REST