Диалоги приложения - QualitySolution/QSProjects GitHub Wiki

Каждый диалог приложения в MVVM минимум из двух частей, модель представления(ViewModel) независимая от используемого GUI логика работы диалога и само представление(View), тонкая прослойка в идеале не содержащая никакой логики просто связывающая свойства и методы модели представления с контролами диалога.

Базовые классы моделей

Менеджер навигации рассчитывает на то что ViewModel будет реализована на базе DialogViewModelBase. Все базовые классы диалогов следует искать в пространстве имен QS.ViewModels.Dialog.

  • DialogViewModelBase - Основной класс диалога с минимальным набором свойств.
  • UowDialogViewModelBase - Класс диалога с созданием Uow.
  • EntityDialogViewModelBase - Диалог для редактирования типа сущности TEntity.
  • WindowDialogViewModelBase - Диалог открывающийся в отдельном окне, как правило это модальные диалоги.

ViewModels

Конструктор

Все текущие реализации резольверов создают ViewMode-и через Autofac поэтому необходимо убедится что все запрашиваеммые конструктором зависимости настроены в контейнере Autofac или являются опциональными.

Если есть необходимость корректно остановить запуск диалога в момент выполнения конструтора. Например при запуске обнаруживается что диалог не может быть запущен, так как не соблюдены все условия, необходимо кинуть исключение AbortCreatingPageException. Менеджер навигации его перехватит и вместо открытия диалога покажет пользователю сообщение, указанное в исключении.

Интерфейсы расширений

В пространстве имен QS.ViewModels.Extension содержаться интерфейсы добавляющие различные опциональные возможности для ViewModel. Добавив их к ViewModel можно расширить ее возможности.

  • IOnCloseActionViewModel - Интерфейс позволяет модели получить вызов перед ее закрытием.

View для Gtk

Самая универсальная 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-и.

⚠️ **GitHub.com Fallback** ⚠️