Диалоги приложения - QualitySolution/QSProjects GitHub Wiki
Каждый диалог приложения в MVVM минимум из двух частей, модель представления(ViewModel) независимая от используемого GUI логика работы диалога и само представление(View), тонкая прослойка в идеале не содержащая никакой логики просто связывающая свойства и методы модели представления с контролами диалога.
Менеджер навигации рассчитывает на то что ViewModel будет реализована на базе DialogViewModelBase
. Все базовые классы диалогов следует искать в пространстве имен QS.ViewModels.Dialog
.
- DialogViewModelBase - Основной класс диалога с минимальным набором свойств.
- UowDialogViewModelBase - Класс диалога с созданием Uow.
-
EntityDialogViewModelBase - Диалог для редактирования типа сущности
TEntity
. - WindowDialogViewModelBase - Диалог открывающийся в отдельном окне, как правило это модальные диалоги.
Все текущие реализации резольверов создают ViewMode-и через Autofac поэтому необходимо убедится что все запрашиваеммые конструктором зависимости настроены в контейнере Autofac или являются опциональными.
Если есть необходимость корректно остановить запуск диалога в момент выполнения конструтора. Например при запуске обнаруживается что диалог не может быть запущен, так как не соблюдены все условия, необходимо кинуть исключение AbortCreatingPageException
. Менеджер навигации его перехватит и вместо открытия диалога покажет пользователю сообщение, указанное в исключении.
В пространстве имен QS.ViewModels.Extension
содержаться интерфейсы добавляющие различные опциональные возможности для ViewModel. Добавив их к ViewModel можно расширить ее возможности.
- IOnCloseActionViewModel - Интерфейс позволяет модели получить вызов перед ее закрытием.
Самая универсальная View для GTK — ViewBase, она принимает любую модель самую базовую. Ее можно использовать для любых компонент, в том числе и частей диалога(контролы, виджеты).
View диалогов находятся в пространстве имен QS.Views.Dialog
.
- DialogViewBase - Самый универсальный и базовый класс View диалога, хранит только свою модель. По сути тоже самое что ViewBase, только модель обязательно должна наследоваться от DialogViewModelBase
- SavedDialogViewBase - View диалога имеющего кнопки Save и Cancel, принимающего модель наследуемую от UowDialogViewModelBase
- EntityDialogViewBase - Тоже самое что и SavedDialogViewBase, только диалог редактирует конкретную сущность, есть доступ к полю Entity из ViewModel-и.
Конструктор view всегда получает первым аргументов свою ViewModel, потому что View не к чему будет обращаться за данными. Основная статья про резольверы View здесь.
Если используется резольвер ClassNamesBaseGtkViewResolver
, то вторым аргументом View может получить IGtkViewResolver
, для того чтобы создавать дочерние View, по дочерним viewModel-ям полученным из своей ViewModel-и.