2013-06-28 1 views
3

Я просто попадаю в свой первый проект с (невероятно отличным) MVVMCross, и я не могу понять, как сделать что-то, что кажется довольно простым: составные виды.Как я могу реализовать составные представления композитных ViewModels?

Предположим, у меня есть Person (FirstName, LastName и т. Д.), А у человека есть Address (улица, город, почтовый код и т. Д.). Поэтому у меня также будет PersonViewModel и AddressViewModel.

Это строго на основе таблетки приложения (только IPAD, на самом деле), и я хочу использовать сдерживание иметь PersonView содержать (многоразовый) AddressView, таким образом, что наружный (человек) вид связывается с Person, в то время как внутренний (адрес) вид привязывается к Person.Address.

Я (смутно) понимаю концепцию презентатора для отображения представлений, как обсуждалось here, но я не вижу, как обрабатывать распространение изменений с лица на адрес и обратно.

Предположим, что объект Person имеет адресный объект, но PersonViewModel показывает AddressViewModel в AddressView, передавая некоторый идентификатор адреса и регидратируя. Затем AddressView привязывается к различным объектам адреса, чем тот, который содержит Person. Я не вижу, как синхронизировать эти два, что, конечно же, победит всю цель привязки.

Как я должен делать то, что я пытаюсь сделать?

+0

не 100% положительного (отсюда мне делает этот комментарий, а не ответ), но если вы называете переменное то же самое в каждом из них (Person vs. PersonViewModel и т. д.) привязка должна происходить «автоматически», когда вы передаете PersonViewModel или AddressViewModel через свое представление и пытаетесь вернуть его в свой контроллер или что-то в этом роде как Лицо или адрес. –

ответ

10

Это действительно широко тема ...

... и есть много возможных ответов.

Я думаю, что очень важно рассмотреть ViewModel как очень простую концепцию - я хотел бы призвать вас думать о ViewModels так же, как модели для представлений - определенно не думайте о них как о объектах «всей страницы».

....

В MvvmCross, вы можете использовать ShowViewModel и пользовательские презентаторам изменить пользовательский интерфейс, если вы хотите - и это продемонстрировано в нескольких примерах MvvmCross включая Разделить ведущий - http://slodge.blogspot.com/2013/05/n24-splitviewpresenter-n1-days-of.html

Эта техника ShowViewModel действительно полезна для navigation - для изменения всей страницы или ее значительных частей.

Однако вам не нужно использовать парадигмы навигации, если ваше приложение им не нужно.

Если вы хотите, то вы можете вместо этого:

  • строить свои собственные иерархии ViewModels в ядре
  • , а затем вы можете создать свой собственный DataBound иерархий представлений в UIs

Это полностью зависит от вас - ваше приложение - король.

....

Я чувствую, что я не объясняя это очень хорошо ...

....

Так что я сдался и записал это видео - может быть, это помогает: http://slodge.blogspot.co.uk/2013/06/n32-truth-about-viewmodels-starring.html

Видео и примеры кода только покрывает IPAD, но я надеюсь, что это легко (МОГ), чтобы увидеть как бы вы распространить его на другие платформы:

  • для Windows, вы можете использовать UserControl
  • для Android вы можете использовать MvxFrameControl, настраиваемое представление или Fragment.
+0

Стюарт, который должен провести какую-то запись для самого тщательного ответа stackoverflow. Видео ответило на мой вопрос и на 14 вопросов, которые я собирался сделать, и научил меня так много о том, что мне нужно делать. Мне было немного плохо о том, как архивировать мое приложение с интенсивным использованием данных, учитывая отсутствие какого-либо связного механизма привязки в iOS, но, обнаружив MVVMCross, я сейчас очень рад начать. Огромное спасибо! –

0

Пожалуйста, проверьте эту реализацию пользовательского предъявитель проектов MvvmCross. Для поддержки фрагментов в андроиде, а также несколько фрагментов в один другой фрагменте/активность:

https://github.com/JelleDamen/CustomMvxAndroidPresenter