Silverlight Twoway Связывание и откат изменений - как? - PullRequest
0 голосов
/ 09 января 2011

У меня есть простой пользовательский контроль SL.Окно списка, которое показывает всем клиентам, а справа - количество текстовых полей и комбинированных списков, которые связаны с SelectedItem (Customer) в списке.SelectedItem привязан к свойству SelectedCustomer.

Я ищу шаблон / методологию для отмены изменений, внесенных в клиента (в связанных текстовых полях и комбинированных полях).

Элементы управления редактирования (текстовые поля и списки) могут быть связаны одним или двумя способами с выбранным элементом списка.Если они связаны в двух направлениях, немедленные изменения в текстовых полях отражаются в списке.Если они ограничены односторонним движением, изменения в текстовых полях не отражаются в объекте SelectedCustomer.

В нижней части формы редактирования у меня есть типичные кнопки Сохранить, Отмена, Удалить.Например, кнопка «Сохранить» будет брать объект SelectedCustomer (если он привязан к двум сторонам, и я отправлю его через службу для сохранения на сервере).

Если текстовые поля связаны в одну сторону, мне нужно каким-то образом захватить значения текстовых полей и вставить внекоторый объект для отправки на сервер для сохранения.

Если я использую двухстороннее связывание и говорю, что операция сохранения не удалась ... мне нужно установить значения SelectedCustomer обратно на исходные значения, в противном случае клиент теперь продолжает видеть данныеэто не было сохранено.

Должен быть простой способ справиться с этим типом сценария ....

Ответы [ 2 ]

0 голосов
/ 09 января 2011

Службы RIA с Entity Framework уже предоставляют эту функциональность, в основном то, как работают службы RIA, и вы можете сделать это также следующим образом.

Каждый класс реализует интерфейс с именем IEditableObject, который предоставляет методы BeginEdit / EndEdit и CancelEdit.Кроме того, он сохраняет (копирует) экземпляр того же класса с именем «OriginalEntity» с теми же значениями, которые были загружены с сервера.

После того, как форма появляется для изменения пользователем, вызывается BeginEdit, который, вероятно, кэширует каждое свойствоиспользуя отражение, в каком-то словаре.Если вы вызываете CancelEdit, то значения из OriginalEntity загружаются обратно в объект.

При некоторых ошибках во время сохранения изменений вы можете либо обновить сущности с сервера (лучший способ), либо попробовать загрузить свойства обратно из свойства OringalEntity..

0 голосов
/ 09 января 2011

Я бы не отказывался от пользовательских изменений, поскольку это легко приводит к разочарованию пользователя.ИМХО, пользователь не должен быть проинформирован о проблемах соединения из-за неконтролируемого отката данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...