WPF - MVVM Screen Management - PullRequest
       17

WPF - MVVM Screen Management

2 голосов
/ 16 февраля 2011

Представьте, что у вас сложный объект данных. Это было достаточно сложно, чтобы редактировать различные свойства объекта, для пользователя было бы лучше иметь несколько экранов. По сути, это корзина для настроенных товаров.

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

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

Итак, мы попытаемся написать приложение, используя MVVM, и при обсуждении различных экранов (а также навигации между ними) мы пришли к следующему вопросу:

Как люди обычно управляют состоянием приложения при использовании MVVM? Панель навигации, которую пользователи будут использовать для смены экранов, будет существовать за пределами экрана, но когда пользователь щелкает по ней, какие распространенные способы используются людьми, чтобы скрыть одно и показать другое?

В целом, как люди обрабатывают глобальное состояние приложения? Пользователь может одновременно работать только с одной корзиной, одновременно может быть зарегистрирован только один пользователь, одновременно может отображаться только один экран. Будет ли лучше создать синглтон, в котором хранятся эти важные свойства, а ViewModels может хранить их копии и подписываться на изменения через агрегатор событий?

Как вы можете сказать, я даже не знаю, с чего начать эту проблему, поэтому любой совет вообще приветствуется и уместен.

Ответы [ 2 ]

3 голосов
/ 16 февраля 2011

Я бы использовал ViewModels для отслеживания состояния приложения.

Одна ViewModel контролирует все приложение и обрабатывает страницу, на которой находится пользователь.Само приложение привязано к основному ViewModel, и большая часть экранного пространства приложения представляет собой ContentControl, который привязан к ViewModel.CurrentPage.Шаблоны данных затем используются для определения того, какое представление отображать для любой страницы, на которой пользователь в данный момент находится

. В прошлом я использовал глобальный синглтон для некоторых объектов (например, текущего пользователя), а модели представления используют ссылкуэто при необходимости.Поэтому, если бы я хотел отобразить имя пользователя на странице, у меня во ViewModel было бы свойство с именем UserName, и оно возвращает Global.Instance.CurrentUser.UserName

1 голос
/ 16 февраля 2011

Для вашего типа ситуации я бы посмотрел на PRISM . PRISM представляет собой набор шаблонов для разработки приложений WPF в слабосвязанной манере MVVM.

PRISM Region Manager Example

В частности, для вашего примера использования нескольких экранов и управления состоянием приложения было бы неплохо начать с использования «Контроллера» для загрузки представлений различных представлений вашей ViewModel (корзины) в отдельные «Области». На MSDN есть отличная статья о начале работы с PRISM , включая составление пользовательских интерфейсов (Регионы).

...