2013-04-20 3 views
2

Я написал приложение для телефона с использованием рамки MVVM. Он собрался хорошо - каждая страница (вид) на телефоне имеет свой собственный ViewModel, и код внутри каждого ViewModel ушел в службу данных и получил соответствующие данные.Как связать View и ViewModel и где их создавать

Итак, у меня была страница с повествованием о предстоящих элементах, и ее ViewModel извлекла коллекцию событий, и в XAML я связал Listbox с этой коллекцией. Аналогичным образом у меня была еще одна страница, показывающая события OneOff и снова, в пределах ее виртуальной машины я вызвал службу данных, чтобы получить сбор данных назад, и это было связано с списком в его представлении.

Не уверен, насколько хороша реализация MVVM, но я переехал в другую базу данных, и было очень просто реализовать другой сервис-центр, не касаясь чего-либо еще, и все это отлично работало.

Хорошо, теперь я ищу, чтобы переделать это приложение в приложение Windows Store. Теперь у меня есть главная страница, которая покажет комбинацию данных, которые на телефоне показывались на отдельных страницах. Гипотетически предположим, что пункты повестки дня и события One Off, упомянутые выше, теперь появляются на одной и той же главной странице (так много места для показа материала)

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

Или у главной модели ViewModel есть в ней коллекции ViewModels. От взгляда вокруг это похоже на то, как это можно сделать, но если да, то где создаются ViewModels? Это, пожалуй, принципиальный сдвиг от того, что я делал ранее.

ответ

1

Да, вы можете установить различные ViewModels в качестве контекста привязки для разных частей вашей страницы. Вы можете использовать шаблон Locator (один объект локатора с свойствами ViewModel) или Injection Dependency, чтобы поддерживать управление вещами.

Отличный образец кода и слайды от Gill Cleeren, которые обсуждают и показывают, как можно установить Contoso Cookbook sample application, используя MVVM, и класс ViewModelLocator можно найти here. Сам разговор находится на channel 9.

Из этих слайдов: связывание

данных является клеем, но ...

мнение нужно «найти» его ViewModel

  • ViewModel является DataContext

Может быть статическим или динамическим

  • Static: View создает ViewModel и устанавливает его в качестве DataContext
  • Динамический: во время выполнения View выбирает свою ViewModel или наоборот

    2 варианта:

    • View-первых: ViewModel получает создан потому, что View создается
    • ViewModel-первых: ViewModel создается и просмотр получает выбран
Смежные вопросы