Как передать объект через две модели просмотра?Wpf MVVM - PullRequest
1 голос
/ 12 июля 2011

У меня есть главный вид, где у вас есть один объект, и вы можете изменить свойства этого объекта.Но тогда у меня есть всплывающее окно, когда вы нажимаете на кнопку: расширенные свойства.Но эти изменения, которые вы делаете во всплывающем окне, также должны быть выполнены в объекте основного вида.

Итак, я реализовал модель представления для всплывающего окна.Я могу поместить здесь некоторый код, но это совершенно бесполезно, потому что у меня ничего нет, только 2 модели представления с привязками с некоторыми текстовыми полями для изменения свойств этого объекта.Таким образом, две модели представления не работают вместе над одним и тем же объектом (я думаю, это то, что я должен сделать).

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

Ответы [ 4 ]

0 голосов
/ 12 июля 2011

Есть несколько способов добиться этого, в зависимости от вашей архитектуры. Например, если вы используете модель расширенного домена, вы можете напрямую привязать свойство Model, отображаемое в вашей модели представления. В этом случае, когда вы вызываете окно дополнительных свойств, вы можете передать экземпляр вашей существующей модели в эту модель представления. Изменения в окне дополнительных свойств будут привязаны к тому же экземпляру вашего бизнес-объекта, который открыт в исходном окне.

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

Когда получено уведомление, исходное окно может сделать недействительными все привязки его модели представления, чтобы пользовательский интерфейс обновлялся соответствующим образом.

0 голосов
/ 12 июля 2011

Откуда этот "домен" или "бизнес" объект, на котором работают ваши view-модели?Найдите способ поделиться этим «источником» между моделями представления.

Например, если вы используете какой-либо ORM, вы можете реализовать (статическую) доменную службу, которую ваши view-модели запрашивают для объекта.

Пример. Ваш DomainService может предоставить метод «GetPersonById (int id)», и он будет возвращать один и тот же объект обоим ViewModels.

0 голосов
/ 12 июля 2011

Или у вас может быть один BusinessObject, который передается обеим ViewModels, и каждый будет представлять то, что требуется для этого View. Таким образом, один бизнес-объект распределяется между 2 виртуальными машинами

0 голосов
/ 12 июля 2011

У вас может быть одна ViewModel, которая включает в себя все необходимые свойства (базовые свойства + те, которые вы редактируете в детальном представлении). Затем вы можете просто передать ту же ViewModel всплывающему представлению =>, таким образом, экземпляр объекта ViewModel одинаков, но два представления немного отличаются и позволяют редактировать разные свойства.

...