Как активировать новую страницу на каком-либо событии в MVVM-WPF? - PullRequest
1 голос
/ 02 октября 2009

У меня есть страница списка, в которой перечислены записи в графическом представлении. При нажатии на некоторую графическую часть или некоторую кнопку, которая добавляется во время выполнения на странице, я хочу активировать новую страницу, передавая некоторые данные в качестве параметра.

Например. У меня есть страница со списком категорий, представление пользовательского интерфейса выполняется во время выполнения. Итак, нажав на какую-то категорию, я хочу разместить связанный с ней продукт на другой странице, я получаю его-CategoryID,

Теперь у меня проблема с активацией / отображением новой страницы в шаблоне MVVM в WPF.

Так же, как Response.Redirect в ASP.Net

Заранее благодарим за ваше ценное предложение.

Ответы [ 3 ]

2 голосов
/ 02 октября 2009

Это на самом деле не «вещь MVVM», это скорее вопрос того, что активирует ваши экраны. Возможно, вам понадобится какой-нибудь всеобъемлющий сервис, который либо поддерживает состояние вашего приложения, либо обрабатывает отображение представлений (и, возможно, также соединение ViewModels), тогда в вашей команде show details вы можете просто сделать что-то вроде:

MyAppService.ShowDetails(currentID);

Возможно, вы захотите взглянуть на систему PRISM Region и справочное приложение PRISM Stock для некоторых примеров архитектуры. Многое зависит от того, как структурирован ваш пользовательский интерфейс, но, надеюсь, он хотя бы даст вам некоторые идеи!

0 голосов
/ 25 апреля 2010

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

0 голосов
/ 02 октября 2009

Есть несколько способов сделать это в MVVM. Я согласен со Стивом Роббинсом, что «ваша виртуальная машина не несет ответственности за загрузку другого экрана», но ваша виртуальная машина несет ответственность за получение уведомления о том, что что-то произошло, что требует отображения нового экрана, и прохождения этого. уведомление вместе с объектом, который будет выполнять загрузку и выгрузку представлений по мере необходимости. Следует помнить, что каждая виртуальная машина привязана к представлению, и она заменяется при отображении нового представления. Таким образом, что-то еще, в природе руководителя, должно сделать замену.

Вот почему платформе Composite WPF (Prism) уделяется так много внимания. Я боролся с теми же проблемами, которые вы поднимали до изучения Prism, который предоставляет исполнительная власть. Я предполагаю, что ваш список категорий отображается в элементе управления. По сути, в вашей ситуации я бы, вероятно, связал свойство SelectedItem элемента управления со свойством SelectedItem в виртуальной машине. Я хотел бы, чтобы установщик этого свойства вызывал метод MVVM, который уведомляет инфраструктуру Prism о выделении и передает SelectedItem, который был передан в установщик свойства. Я бы использовал Prism для загрузки модуля со страницей, которая должна отображаться.

Приятной особенностью Prism является то, что она будет работать, если вы хотите, чтобы ваша страница Продукта заменила страницу категории, и будет работать так же хорошо, если вы хотите отобразить панель Продукт рядом с панелью Категории в том же окне. При настройке оболочки (в главном окне) достаточно указать один или два региона.

У Призмы есть кривая обучения, но она не очень крутая. Он очень хорошо работает с MVVM и является отличной средой для любого приложения, которое может извлечь выгоду из разделения. Я считаю это ключевым элементом дизайна приложений WPF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...