Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Начальство разработчика Prism — часть 8, навигация

Anna | 18.06.2014 | нет комментариев

Во время взаимодействия с пользователем, UI приложения может подвергаться существенным изменениям, в зависимости от того, какие действия должен исполнять пользователь, и с какими данными он работает. Процесс, когда приложение координирует метаморфозы пользовательского интерфейса, Зачастую называют «навигацией (navigation)».

Нередко, «навигация» обозначает, что одни элементы управления удаляются, а другие добавляются в пользовательский интерфейс. В других случает, это обозначает обновление вида теснее существующих элементов управления. К примеру, некоторые элементы управления могут скрываться, либо сворачиваться, а другие, напротив, возникать, либо разворачиваться. Подобно, «навигация» может значить, что данные, показываемые в некоторых элементах управления, могут обновляться для отображения нынешнего состояния приложения. К примеру, при сценарии “master-detail“, данные, отображаемые в detail-представлении, обновляются в зависимости от того, какой элемент выбран в master-представлении. Все эти сценарии могут быть расценены, как «навигация», так как пользовательский интерфейс обновляется для отображения внутреннего состояния приложения и того, какую задачу исполняет пользователь в нынешний момент.

Навигация в UI может быть как следствием пользовательского взаимодействия, так и реакцией на метаморфозы внутреннего состояния приложения. В некоторых случаях, навигация может порождать вовсе небольшие обновления UI, не требующие какой-либо трудной логики. В других случаях, могут быть задействованы трудные бизнес-правила. К примеру, приложение может не дозволить пользователю выйти из какой-либо формы, не удостоверившись, что введённые данные правильны.

Реализация навигации в WPF и Silverlight Зачастую может быть достаточно откровенной, так как обе эти платформы предоставляют встроенную поддержку навигации. Впрочем реализация навигации может стать достаточно трудной, при применении образца MVVM, либо в комбинированных приложениях, использующих несколько слабо связанных модулей. Prism предоставляет начальство по реализации навигации в сходственных случаях.

Навигация в Prism

Термин «навигация» определён, как процесс, в котором приложение координирует метаморфозы UI в результат на жесты пользователя, либо метаморфозы внутреннего состояния приложения.

Обновления в UI могут быть произведены как с поддержкой удаления, либо добавления элементов управления в визуальное дерево, так и с поддержкой метаморфозы состояния элементов, теснее находящихся в нём. Вследствие эластичности WPF и Silverlight, в них дозволено использовать оба этих подхода. Но на то, какой подход будет больше подходящим для вашего случая, может влиять огромное число факторов.

Prism делает отличия между двумя типами навигации, описанными выше. Навигация, основанная на изменении состояния теснее существующих элементов управления, именуется «навигация на основе состояний (state-based navigation)». Навигация, ослена в администраторе визуальных состояний.

Иной пример применения такого жанра навигации представлен в State-Based Navigation QuickStart, когда пользователь переключается на представление с дополнительной информацией о выбранном контакте, как показано на дальнейшей иллюстрации.

Представление Contact Details в State-Based Navigation QuickStart

Это также с лёгкостью реализовано с поддержкой Expression Blend’s DataStateBehavior, впрочем в данном случае поведение привязано к свойству ShowDetails модели представления, вследствие которому происходит переключение между визуальными состояниями ShowDetails и ShowContacts с применением анимации флип-перехода.

Отображение состояния приложения

Подобно, представление в приложении изредка может изменять свою разметку, либо жанр, в зависимости от метаморфозы внутреннего состояния приложения, которое, в свою очередь, может быть представлено через свойства модели представления. Пример такого сценария дан в State-Based Navigation QuickStart, где ранг подключения заказчика предоставлен через качество ConnectionStatus в модели представления Chat . При изменении ранга подключения, представление обновляется (по событию метаморфозы свойства), как представлено на иллюстрации ниже.

Представление состояния подключения в State-Based Navigation QuickStart

Для реализации такого переключения состояний, в представлении объявлено поведение DataStateBehavior, привязанное к свойству ConnectionStatus модели представления.

<DataStateBehavior Binding="{Binding ConnectionStatus}" 
            TrueState="Available" FalseState="Unavailable"/>

Подметьте, что состояние подключения может быть изменено как пользователем через визуальный интерфейс, так и приложением, в зависимости от внутренней логики, либо появления какого-либо события. Для примера, приложение может перейти в состояние «unavailable», если пользователь не взаимодействует с представление в течение определённого времени, либо если календарь пользователя информирует, что он находится на совещании. State-Based Navigation QuickStart симулирует такое поведение с поддержкой случайного переключения состояние по таймеру. При смене состояния, обновляется качество модели представления, позже чего представление уведомляется об этом через событие метаморфозы свойства. Пользовательский интерфейс обновляется для отображения метаморфозы состояния подключения.

Все предыдущие примеры включали объявление визуальных состояний в представлении, и переключение между ними в итоге пользовательского взаимодействия с представлением, либо через метаморфоза значения свойств, объявленных в модели представления. Такой подход разрешает дизайнерам пользовательского интерфейса реализовывать визуальное поведение в жанре навигации без необходимости смены представлений, либо метаморфозы какого-либо начального кода приложения. Данный подход применим, когда представлению требуется отображать одни и те же данные в различных жанрах, либо с различной разметкой. Он не подходит в обстановках, когда требуется отобразить данные различных типов, либо иную функциональность приложения, а также, когда требуется навигация к иным частям приложения.

Взаимодействие с пользователем

Достаточно Зачастую приложению нужно произвести взаимодействие с пользователем в ограниченной форме. В таких обстановках бывает проще применять навигацию на основе состояний в нынешнем контексте, а не переходить к новому представлению. Для примера, в State-Based Navigation QuickStart пользователь может послать сообщение контакту, нажав на кнопку Send Message. Позже этого, представление отображает всплывающее сообщение, которое разрешает пользователю ввести желаемое сообщение, как показано ниже. Так как взаимодействие с пользователем ограничено и логически связано с контекстом родительского представления, значительно проще реализовать его споддержкой навигации на основе состояний.

Взаимодействие с пользователем с помощью всплывающих сообщений в State-Based Navigation QuickStart

Для достижения такого поведения, State-Based Navigation QuickStart реализует команду SendMessage, которая привязана к кнопке Send Message. При вызове этой команды, модель представления взаимодействует с представлением для показа всплывающего окна. Это достигается с поддержкой Interaction Request паттерна, описанного в главе 5, “Реализация паттерна MVVM“.

Дальнейший код показывает, как представление в State-Based Navigation QuickStart использует объект запроса взаимодействия SendMessageRequest, предоставляемый моделью представления. При появлении события запроса взаимодействия, представление SendMessageChildWindow отображается во всплывающем окне.

<prism:InteractionRequestTrigger SourceObject="{Binding SendMessageRequest}">
    <prism:PopupChildWindowAction>
        <prism:PopupChildWindowAction.ChildWindow>
            <vs:SendMessageChildWindow />
        </prism:PopupChildWindowAction.ChildWindow>
    </prism:PopupChildWindowAction>
</prism:InteractionRequestTrigger>

Продолжение следует.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB