В настоящее время я знакомлюсь с Prism 4.0 и MVVM (использую Cinch 2.0 в качестве инфраструктуры MVVM). Я создаю оболочку для приложения, которое будет содержать примерно 15 модулей. Мы используем WPF.
Приложение использует ленту для своей системы меню. Модули загружаются, когда пользователь нажимает кнопку на ленте (оболочка обрабатывает эту задачу с помощью своей модели представления.) Модули регистрируют свое основное представление с помощью диспетчера областей (оболочка определяет пока только одну основную область.) Большинство модулей.) Большинство модулей загружаются по запросу. Это прекрасно работает в простом сценарии:
- Пользователь нажимает на кнопку. Модуль загружается, вид добавляется в регион и отображается.
- Пользователь нажимает кнопку для какого-то другого модуля. Та же идея, что и выше. Представление для этого модуля отображается в том же регионе, заменяя представление из предыдущего модуля.
Когда все перестает работать, пользователь снова нажимает кнопку для ранее загруженного модуля. Поскольку модуль уже загружен, практически ничего не происходит - текущий вид остается отображенным на экране. Это имеет смысл - LoadModule в значительной степени игнорируется (или, по крайней мере, выглядит так, будто его игнорируют).
Я провел довольно много поисков в Google для этого, и большинство найденных ответов требовали, чтобы оболочка переместилась к представлению. Теперь, если я не ошибаюсь, это слишком сильно связывает оболочку с модулями: оболочка не должна знать о представлениях в любом модуле. По сути, это, кажется, нарушает схему MVVM. Оболочка, зная о модулях, является необходимой связью (в нашем случае, во всяком случае, мы не (не можем) использовать такие вещи, как обнаружение каталогов. Но, на мой взгляд, оболочка, зная о представлениях каждого модуля, продвигает ее.
Суть в том, что вопрос таков: как я могу перемещаться между существующими представлениями, используя интерфейс ленты (ну, тот факт, что это лента не имеет к этому никакого отношения), который управляется оболочкой, с помощью команды "Tell" «уже загруженный модуль». Эй, у вас снова есть фокус, поэтому отображайте любой вид, который отображался в последний раз, когда вы были звездой шоу. "
Опять же, может быть, я просто ошибаюсь ... Не будет первым. :)
Спасибо!