Привязка данных WinForms с помощью кнопки Сохранить? - PullRequest
5 голосов
/ 12 марта 2010

Как работает привязка данных в C # WinForms, когда у вас есть кнопка Сохранить? Я не хочу, чтобы данные обновлялись, пока я не нажму Сохранить!

У меня есть две формы (список и подробности), подкрепленные коллекцией BindingList<T> и моим пользовательским объектом из этой коллекции, соответственно. Я могу привязать каждую форму к списку или объекту соответственно. Однако любые изменения, внесенные в форму сведений, немедленно отражаются в форме списка - я не хочу сохранять изменения и обновлять данные, отображаемые в списке, до нажатия кнопки Сохранить.

Предназначена ли привязка данных для поддержки этого? Есть ли общая схема для этого?

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

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

  • Реализация IEditableObject и вызов EndEdit при сохранении почти работают, так как я могу запретить уведомлению списка об изменениях, сделанных до нажатия кнопки Сохранить, но если что-то еще вызывает обновление, список обновляется со временем данные.

В настоящее время мне не нужно связываться с данными в подробном представлении, и я делаю все вручную. Что довольно раздражает.

Ответы [ 2 ]

4 голосов
/ 12 марта 2010

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

Лучшее решение, которое мы нашли здесь, - это редактировать клоны объектов, а затем согласовывать изменения, как вы упоминали. Возможно, вы захотите создать пользовательский интерфейс коллекции и / или объекта, который поможет вам управлять этим типом вещей.

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

0 голосов
/ 12 марта 2010

Если вы настроены на использование списка привязок, лучше всего было бы реализовать IBindingList для создания желаемой функциональности. Это также может быть возможным, просто унаследовав от BindingList и переопределив соответствующие методы, чтобы изменить поведение списка привязок.

http://msdn.microsoft.com/en-us/library/system.componentmodel.ibindinglist.aspx

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

Удачи.

...