61. Avalonia UI Real World (Button Flyout Menu)
00:00 Создание списка процессов • На главной странице есть список действий, который можно расширить, щёлкнув правой кнопкой мыши. • Цель — заранее определить набор заданий и загрузить его на домашнюю страницу через кнопку загрузки. • Для выпадающего списка на домашней странице требуется наблюдаемое свойство, представляющее собой коллекцию процессов. 00:39 Проблемы с внедрением зависимостей • Домашняя страница должна сохранять состояние между входами и выходами, но служба базы данных запускается только один раз при загрузке страницы. • Статический экземпляр службы базы данных не обновляется, что приводит к устаревшей информации. • Необходимо заменить службу базы данных на фабрику баз данных для обеспечения обновления данных. 01:30 Инициализация страницы • Фабрику баз данных уже использовали для другой страницы, поэтому её можно применить и здесь. • Код инициализации должен запускаться при загрузке страницы, а не при создании объекта. • Триггер загрузки будет запускаться каждый раз при переключении на страницу. 02:15 Преобразование инициализации в команду • Инициализацию нужно преобразовать в команду ретрансляции для её вызова. • Важно избежать отмены действий при повторной инициализации. 03:49 Очистка конструктора • Удаление конструктора и времени разработки упрощает код. • Передача зависимостей в основной ViewModel. 04:16 Обновление службы базы данных • Замена службы базы данных на фабрику для работы в экземпляре singleton. • Очистка конструктора времени разработки и использование нового заголовка. 08:25 Заполнение списка процессов • Вызов службы базы данных для получения списка процессов. • Генерация списка процессов на основе данных из базы данных. • Копирование двух строк кода с страницы процесса для заполнения списка. 10:17 Запуск инициализации • Запуск инициализированной команды при каждом открытии страницы. • Переход на следующую страницу после завершения инициализации. 10:31 Добавление элементов в модель представления процесса • Добавление элементов для облегчения очистки класса. • Переопределение метода tostring для отображения названия должности и описания в скобках. 11:04 Инициализация страницы • Инициализированный файл запускается каждый раз при входе на страницу. • Проблема: данные теряются при переключении между «входом» и «выходом». • Решение: проверка null для предотвращения переопределения действий. 11:57 Работа со списком действий • Список доступных действий обновляется при каждом входе и выходе. • Пример использования: выбор «печатать только рисунок» через меню правой кнопкой мыши. 12:28 Проблемы с обновлением меню • Меню не обновляется после сохранения изменений. • Причина: использование службы базы данных вместо фабрики баз данных. 13:01 Преобразование службы базы данных • Замена службы базы данных на фабрику баз данных для решения проблемы. • Важность осторожности при работе с одиночными файлами. 14:27 Обновление имён действий • Обновление имён действий при загрузке страницы. • Сохранение имён в момент добавления в список. 15:12 Создание кнопки загрузки процессов • Создание кнопки с выпадающим меню для загрузки процессов. • Привязка списка процессов к выпадающему меню. 16:20 Настройка шаблона списка • Переопределение строки для отображения процессов в списке. • Создание шаблона элемента и шаблона данных для списка. 17:45 Обработка событий списка • Обработка событий нажатия и отпускания указателя в списке. • Предупреждение о наличии элементов в списке перед их переопределением. 20:30 Получение выбранного элемента • Получение выбранного элемента через отправителя события. • Проверка контекста данных и модели представления процесса. 22:50 Тестирование загрузки процесса • Тестирование загрузки процесса через кнопку «Загрузить». • Проблемы при щелчке внутри списка и их решение. 22:54 Работа с моделью представления процесса • Выбор модели представления процесса. • Проверка работы модели при щелчке снаружи. • Получение выбранного предмета. 23:25 Модель представления домашней страницы • Определение модели представления домашней страницы. • Доступ к точечным действиям viewmodel. • Переопределение действий process viewmodel. 24:11 Подтверждение переопределения действий • Копирование кода для подтверждения переопределения действий. • Асинхронная обработка и ожидание ответа. • Передача логики в модель представления. 25:27 Создание подтверждённого диалога • Перенос логики в viewmodel. • Создание подтверждённого диалога при необходимости действий. • Проверка работы диалога при добавлении нового элемента. 27:05 Настройка стиля диалога • Проблемы с выравниванием кнопок и текста. • Настройка размера шрифта и отступов. • Добавление переноса слов и изменение ориентации на горизонтальную. 31:02 Завершение настройки диалога • Увеличение ширины диалога до 400 пикселей. • Подтверждение перезагрузки диалога. • Возможность добавления и удаления элементов через контекстное меню.
00:00 Создание списка процессов • На главной странице есть список действий, который можно расширить, щёлкнув правой кнопкой мыши. • Цель — заранее определить набор заданий и загрузить его на домашнюю страницу через кнопку загрузки. • Для выпадающего списка на домашней странице требуется наблюдаемое свойство, представляющее собой коллекцию процессов. 00:39 Проблемы с внедрением зависимостей • Домашняя страница должна сохранять состояние между входами и выходами, но служба базы данных запускается только один раз при загрузке страницы. • Статический экземпляр службы базы данных не обновляется, что приводит к устаревшей информации. • Необходимо заменить службу базы данных на фабрику баз данных для обеспечения обновления данных. 01:30 Инициализация страницы • Фабрику баз данных уже использовали для другой страницы, поэтому её можно применить и здесь. • Код инициализации должен запускаться при загрузке страницы, а не при создании объекта. • Триггер загрузки будет запускаться каждый раз при переключении на страницу. 02:15 Преобразование инициализации в команду • Инициализацию нужно преобразовать в команду ретрансляции для её вызова. • Важно избежать отмены действий при повторной инициализации. 03:49 Очистка конструктора • Удаление конструктора и времени разработки упрощает код. • Передача зависимостей в основной ViewModel. 04:16 Обновление службы базы данных • Замена службы базы данных на фабрику для работы в экземпляре singleton. • Очистка конструктора времени разработки и использование нового заголовка. 08:25 Заполнение списка процессов • Вызов службы базы данных для получения списка процессов. • Генерация списка процессов на основе данных из базы данных. • Копирование двух строк кода с страницы процесса для заполнения списка. 10:17 Запуск инициализации • Запуск инициализированной команды при каждом открытии страницы. • Переход на следующую страницу после завершения инициализации. 10:31 Добавление элементов в модель представления процесса • Добавление элементов для облегчения очистки класса. • Переопределение метода tostring для отображения названия должности и описания в скобках. 11:04 Инициализация страницы • Инициализированный файл запускается каждый раз при входе на страницу. • Проблема: данные теряются при переключении между «входом» и «выходом». • Решение: проверка null для предотвращения переопределения действий. 11:57 Работа со списком действий • Список доступных действий обновляется при каждом входе и выходе. • Пример использования: выбор «печатать только рисунок» через меню правой кнопкой мыши. 12:28 Проблемы с обновлением меню • Меню не обновляется после сохранения изменений. • Причина: использование службы базы данных вместо фабрики баз данных. 13:01 Преобразование службы базы данных • Замена службы базы данных на фабрику баз данных для решения проблемы. • Важность осторожности при работе с одиночными файлами. 14:27 Обновление имён действий • Обновление имён действий при загрузке страницы. • Сохранение имён в момент добавления в список. 15:12 Создание кнопки загрузки процессов • Создание кнопки с выпадающим меню для загрузки процессов. • Привязка списка процессов к выпадающему меню. 16:20 Настройка шаблона списка • Переопределение строки для отображения процессов в списке. • Создание шаблона элемента и шаблона данных для списка. 17:45 Обработка событий списка • Обработка событий нажатия и отпускания указателя в списке. • Предупреждение о наличии элементов в списке перед их переопределением. 20:30 Получение выбранного элемента • Получение выбранного элемента через отправителя события. • Проверка контекста данных и модели представления процесса. 22:50 Тестирование загрузки процесса • Тестирование загрузки процесса через кнопку «Загрузить». • Проблемы при щелчке внутри списка и их решение. 22:54 Работа с моделью представления процесса • Выбор модели представления процесса. • Проверка работы модели при щелчке снаружи. • Получение выбранного предмета. 23:25 Модель представления домашней страницы • Определение модели представления домашней страницы. • Доступ к точечным действиям viewmodel. • Переопределение действий process viewmodel. 24:11 Подтверждение переопределения действий • Копирование кода для подтверждения переопределения действий. • Асинхронная обработка и ожидание ответа. • Передача логики в модель представления. 25:27 Создание подтверждённого диалога • Перенос логики в viewmodel. • Создание подтверждённого диалога при необходимости действий. • Проверка работы диалога при добавлении нового элемента. 27:05 Настройка стиля диалога • Проблемы с выравниванием кнопок и текста. • Настройка размера шрифта и отступов. • Добавление переноса слов и изменение ориентации на горизонтальную. 31:02 Завершение настройки диалога • Увеличение ширины диалога до 400 пикселей. • Подтверждение перезагрузки диалога. • Возможность добавления и удаления элементов через контекстное меню.
