Prism - может ли деактивация вида повлиять на другие части модуля? - PullRequest
1 голос
/ 01 декабря 2011

У меня есть идея для приложения, которое я не уверен, если это возможно, я был бы признателен за ваши идеи:

Я хотел бы иметь ToolBar в моем Shell, где каждый загруженный модуль может добавлять свои кнопки. Shell также будет иметь области содержимого, которые показывают соответствующие представления модулей.
Однако некоторые модули имеют одни и те же регионы, есть ли в Prism механизм, который может помочь в удалении кнопок, которые в настоящее время не имеют значения?
Например, если ModuleA добавляет кнопку «Получить справку», а ModuleB добавляет кнопку «Отправить сообщение», и они совместно используют один и тот же регион (только один из них виден в данный момент времени), когда отображается ModuleA, я Хотелось бы, чтобы кнопка «Отправить сообщение» была временно удалена или, по крайней мере, деактивирована из ToolBar (но вернулась в то же положение, когда активирован вид ModuleB).
Подходит ли этот подход при использовании MVVM?

Спасибо.

1 Ответ

1 голос
/ 01 декабря 2011

Возможно с MVVM и призмой.Я делаю что-то подобное, где у меня есть переключатель кнопок, и он будет заполнен из списка.Каждая кнопка представляет форму, и нажатие на кнопку, очевидно, открывает эту форму.Я создал интерфейс ISwitchboard, который каждая форма реализует, который хочет быть частью коммутатора.Поэтому каждый элемент интерфейса ISwitchboard реализует ShowDialogForm, команду WPF и т. Д.

Для этого поста было бы слишком громоздко объяснять все детали, которые вам нужно сделать.Тем не менее, это основные принципы, по которым работает мой код:

  1. В моем загрузчике я переопределяю метод GetModuleCatelog (), чтобы добавить любые модули, которые я желаю.Каждый модуль представляет приложение (форму), которое будет открыто с коммутатора и должно наследоваться от интерфейса, который я создал, чтобы модель представления знала, как ее открыть или показывать, когда это необходимо.Вам может не понадобиться использовать модули для того, что вы хотите, но это ваш выбор дизайна.Тем не менее, если ваши кнопки будут открывать приложения, вам потребуются модули.

  2. Затем моя модель представления предоставляет список доступных модулей, использующих мой пользовательский интерфейс, которые были добавлены с помощью призмы.Я могу получить список модулей через интерфейс IModuleCatalog, который я передаю в конструктор виртуальной машины.Список является наблюдаемой коллекцией.Если я хочу реализовать права пользователя, тогда я могу ограничить список таким образом, если захочу.

  3. В моем представлении теперь есть элемент управления, который связывается со списком коммутаторов.Я могу представить им, как я хочу оттуда.Я создал шаблон элемента, который будет отображаться для каждого элемента в списке, и он привязан к команде, предоставляемой интерфейсом SwitchboardItem.

...