2011-01-09 6 views
0

У меня есть простой пользовательский контроль SL. Список, который показывает всех клиентов и справа несколько текстовых полей и списков со списком, привязанных к элементу SelectedItem (Customer) в списке. Выбранный элемент привязан к свойству SelectedCustomer.Silverlight Twoway Связывание и откат изменений - как?

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

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

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

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

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

Там должен быть простым способом борьбы с этим типом сценария ....

ответ

0

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

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

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

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

+0

Хорошо, поэтому я сделал частичный класс для моего класса Customer i.e. public partial class Customer: IEditableObject в приложении SL. В рамках методов я предоставил код, похожий на найденный здесь http://www.silverlight.net/learn/tutorials/silverlight-4/web-services-and-silverlight/#Exercise3 – David

+0

-1 для принятого ответа? , прокомментируйте пожалуйста .... Mr Smart -1 Voter ... –

0

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

+0

Правда, в моем конкретном случае пользователь нажимает кнопку «Отмена», и поэтому мне нужно откат изменений, сделанных в форме редактирования, а также в списке. – David

Смежные вопросы