Как изменить View + viewmodel на основе команды - PullRequest
2 голосов
/ 10 марта 2011

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

Чего я не понимаю, так это как и где изменить мой пользовательский интерфейс, основываясь на этом.

Допустим, у меня есть приложение, в котором мне нужно сначала войти. мой логин - это вид и модель + модель, которая у меня есть. Нет проблем в показе этого, потому что это представление «запуска», я просто добавляю его в конструктор моего окна (правильно или неправильно?). Когда пользователь успешно вошел в систему, я хочу изменить представление и модель представления, например. вид на панель приборов + viewmodel. Должен ли я сделать все это вручную, просто удалив usercontrol, который был логином, а затем добавив другой usercontrol, который является панелью мониторинга? а затем изменить текст данных? Как это обычно достигается?

Меня беспокоит то, что я ввожу много кода просто для переключения view + viewmodel, и это немного беспокоит меня. Что, когда я перехожу из панели мониторинга в список клиентов, затем в список проектов и т. Д., Я записываю эту логику в свой обработчик событий / команду для нажатой кнопки?

Ответы [ 3 ]

2 голосов
/ 10 марта 2011
  • представление - это пользовательский интерфейс (это может быть окно, страница, пользовательский контроль)
  • модель представления является серверной частью этого представления

Ваше окно входа будет иметь свою собственную модель представления, а ваша панель мониторинга будет иметь свою собственную модель представления. Вы не переключаете модели просмотра вручную.

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

У вас есть вид входа в систему и вид модели + вид панели инструментов и вид модели + другой вид и вид моделей для других элементов управления.

- Обновление:

Допустим, у вас есть следующее: - Окно - контроль входа - Панель управления

У всех есть свои собственные представления (V) и представления моделей (VM) Window VM имеет два свойства видимости, свойства видимости Login и Dashboard в Window V связываются с ними.

Когда приложение запускает элемент управления «Вход в систему» ​​видимым, при успешном входе в систему модель сообщает виртуальной машине «Окно» установить свойство видимости «Вход в систему» ​​как свернутую, а свойство «Видимость панели мониторинга» - видимой, о чем затем виртуальная машина «Окно» сообщает «Окну V». скрыть элемент управления Login и показать элемент управления Dashboard.

«говорит» означает поднять событие, отправить сообщение, вызвать метод - зависит от того, как вы реализуете MVVM.

1 голос
/ 10 марта 2011

Создать MainPageView с пользовательским элементом управления и фреймом.Установите MainPageView в качестве корневого визуала.Затем вы можете привязать источник кадра к свойству в MainPageViewModel.Затем для перехода между логином или панелью мониторинга необходимо отправить сообщение в MainPageViewModel и установить свойство, с которым связан источник фрейма.

0 голосов
/ 12 марта 2011

Если вы хотите, чтобы ваш вид находился в другом окне, вы можете просто создать свой вид / модель представления в каждом окне (отдельный XAML) и переключаться между ними, создавая новое окно, делая его видимым и затем выходя из предыдущего.

Однако, если вы хотите переключить представление в одном и том же окне, я рекомендую вам сделать это с помощью пользовательского ContentPresenter. Я задал похожий вопрос по этому вопросу, который вы можете найти здесь: Управление ресурсами при изменении содержимого окна .

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

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