У меня есть простое приложение, которое состоит из:MVVM - Решение, которое ViewModel несет ответственность за то, что
Модель
- Элементы
- Критерии фильтрации применяется к этому списку пунктов
Просмотров
- WelcomePage
- MainItemsPage
- FilterEditPage
Я использую MVVM Light и Windows Phone 7
настоящее время у меня 3 ViewModels, по одному для каждого вида. Раньше у меня была единственная ViewModel, которая создала коммуникацию, о которой я собираюсь расспросить очень легко. Однако я хотел пойти с 3 отдельными виртуальными машинами, поскольку это кажется правильным.
WelcomePage может установить один из критериев фильтра перед тем, как перейти к MainItemsPage. MainItemsPage привязан к свойству Items, которое отображается его ViewModel. Этот ViewModel должен отфильтровать этот список в зависимости от текущих критериев фильтра. FilterEditPage позволяет пользователю редактировать полный набор критериев из 4 переменных. При изменении критериев коллекция элементов, используемая в ViewModel для MainItemsPage, нуждается в повторной фильтрации.
Вопрос в том, как я перемещаю фильтр с помощью приложения. Я знаю, что MVVM имеет концепцию обмена сообщениями, а инструментарий MVVM Light предоставляет класс Messenger. Однако с чем я борюсь, лежит ли ответственность за отправку этих сообщений?
- Выполняют ли 3 виртуальных машины в Модели, когда им нужно работать с текущим набором фильтров?
- Выполняют ли все обновления фильтра через FilterEditViewModel и, в свою очередь, транслируют сообщение об изменении фильтра?
- Вернусь ли я к единственной виртуальной машине для всех видов?
Я не могу видеть 1. работать, потому что что-то нужно будет запускать виртуальные машины, чтобы вернуться к модели Я знаю, что могу получить 3. работать прямо сейчас без проблем. Это неправильно?
ТИА
Pat Long
P.S: Добавлено FinishFilterChange() to FilterEditVM – JanW
Спасибо. Я могу видеть все, что работает, но кажется неправильным, что маленькая старая WelcomePage - это Родитель, но я думаю, что это связано с некоторым недоразумением и неправильным применением семантики. Вы положили WelcomePage в качестве родителя, потому что это первый экран (просмотр) загружен? –
Точно. Конечно, с приведенной выше схемой вы можете свободно выбирать свой корень. Но я рекомендую использовать первый вид в качестве вашего корня, потому что его смысл, если ваша модель контроллера представляет собой способ, которым вы можете следовать в графическом интерфейсе. Если вы просмотрите свое приложение через некоторое время, вам будет легче понять рабочий процесс. Если вам не нравится ваша приветственная страница с правами root, я предлагаю вам создать еще один настоящий RootView, в котором вы переключите три других вида. В этом конкретном RootView будут представлены все три модели ViewModels. – JanW