Когда ONE View имеет ONE ViewModel, отношение / заказ-продукт-клиент / GUI может стать очень неприятным - PullRequest
1 голос
/ 18 сентября 2010

Я думаю, что у меня возникла какая-то вспышка знаний, и теперь я совершенно сбит с толку.Я смотрел на многие реализации mvvm, такие как Ocean, Stuff, BBQShack, демоверсия MVVM, WAF, Chinch1,2 и т. Д. *

Все делают MVVM как-то по-разному ...

Существует ОДИН сценарийэто сводит меня с ума.Мне не хватает понимания, и я надеюсь, что кто-то может очистить облака в моей голове.

Но прежде чем я хочу опубликовать комментарий от Джереми Ликнесс :

«Я полагаю, что большинство разработчиков согласны с тем, что представление должно иметь ровно одну модель представления. Нет необходимости присоединять несколько моделей представления к одному представлению. Если вы думаете о разделении интересов, это имеет смысл, потому что если у вас есть« виджет контакта »"на экране, привязанном к" контактной модели представления "и" виджету компании ", привязанному к" модели представления компании ", это должны быть отдельные представления, а не одно представление с двумя моделями представления."

Сценарий: Когда представление имеет ОДНУ ViewModel или ViewModel привязана к ОДНОМУ UserControl ...

Вопрос: Нужно ли создавать 3 UserControls CustomerView,OrderView, ProductView для каждой ViewModel?Если да, то как синхронизировать привязку данных в графическом интерфейсе между 3 пользовательскими элементами управления и 3 моделями представления в фоновом режиме?Использование системы обмена сообщениями?

Если ваш ответ ДА , то почему бы мне не создать ОДИН большой UserControl, связанный с BillingViewModel, действующим в качестве контроллера, который предоставляет свойство ObservableCollection CustomerListWithAllOrdersAndProducts, которое можно легко привязать кверхний контрольный текст данных и все 3 таблицы (клиент и т. д.), расположенные под ним, привязываются к текущему текстовому тексту.Тогда смена клиента автоматически изменит заказы и продукты ...

Как бы вы справились с этим сценарием, когда на экране есть не только 3 элемента UserControls, например DataGrids, но также имеется формуляр Customer с 5 текстовыми полями иa Формуляр заказа с 3 текстовыми полями, вы бы поместили эти формулы в еще 2 пользовательских элемента управления, чтобы у вас было 5 пользовательских элементов управления в окне, и все вместе "отображались" с помощью его ViewModel, взаимодействующей с системой Messenger.Это может очень запутать ... Неужели так делают в больших приложениях mvvm?

1 Ответ

2 голосов
/ 19 сентября 2010

Вы предлагаете создать 3 элемента управления (Клиент / Заказ / Продукт), потому что ваш дизайн требует от вас этого.Это означает, что ваш дизайнер GUI не может выбрать чередование полей клиента с полями Order или Product.

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

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

...