Моя модель состоит из одного основного объекта, который пользователь может добавлять и другие объекты. Добавленные объекты хранятся в List<object>
, содержащихся в основном объекте, и связанных дочерних объектах.Передача данных на уровень данных
Так что если проект - это дом. Пользователь может добавить в дом количество Room
объектов, которые хранятся в List<Room> RoomList
. Затем каждый Room
может иметь количество Furnishings
, добавленное снова в каждую комнату. List<Furnishing> FurnishingsList
Вопрос в том, как реализовать это в подходе MVVM? Когда пользователь добавляет новый объект, добавьте его в ObservableCollection
в ViewModel, чтобы представление обновилось и в то же время добавило его в модель, подключенную к виртуальной машине? Или я храню его в виртуальной машине до сохранения или коммита, а затем передаю его в модель?
В моем примере у меня есть разные редакторы (каждый из них - пользовательский элемент управления). Таким образом, пользователь может редактировать дом на высоком уровне, используя один редактор для добавления, редактирования и удаления комнат из дома. И, на более низком уровне, используя другой редактор для редактирования каждой комнаты, добавьте и удалите Furnishings
.
Итак, когда пользователь «Редактирует» комнату. Я выпускаю EditRoomModelView
, содержащий Room
. Пользователь добавляет, редактирует и иным образом манипулирует мебелью в этой комнате.
При каждой команде лучше всего синхронизировать данные в Модели и ModelViee, как указано выше. Или я запишу изменения прямо в Модели, и ViewModel предоставляет только геттеры на вложенных свойствах модели. Таким образом, однако добавление объектов в списки моделей не обновляет представление. мне действительно нужно было бы добавлять данные как к ModelView, так и к модели одновременно, чтобы все было в одном состоянии.
Принадлежности для бессвязных, изо всех сил пытаясь найти хороший подход к этому, кто-нибудь uderstand, что я получаю?
Спасибо Эрик, Когда я успешно передаю новый объект до уровня домена и он хранится в 'List
У меня не было бы ничего ниже уровня представления, даже знаю, что ObservableCollection (т. Е. Нет ссылки на сборку WPF, которая его содержит).Как обычно у меня есть компоненты GUI, которые уведомлены об этом, это использование событий или обратных вызовов. Для простого примера рассмотрим две виртуальные машины со ссылкой на один и тот же экземпляр службы. VM A сообщает службе добавить комнату, и служба делает любую магию, чтобы добавить комнату. Когда он будет завершен и успешный, он вызывает событие, которое слушает VM B. Когда событие поднимается, VM B повторно запрашивает услугу для всех комнат ... –
В реальной реализации сам домен обрабатывал бы добавление, а затем поднимал событие, которое служба будет потреблять и ретранслировать на виртуальную машину. Но идея здесь такова: виртуальные машины просто знают, как спросить сервис для объектов (POCO/DTO) и как передать их для таких операций, как обновление. Таким образом, связь между сервисом и виртуальной машиной заключается в том, что VM будет запрашивать объекты (Get/GetAll) и запрашивать операции (Add, Edit и т. Д.). VM также прослушивает событие службы, называет его «OnDirty», который сообщает виртуальной машине, когда она может быть не синхронизирована с доменом. Затем VM несет бремя повторного запроса. –