Привязка данных WinForms с кнопкой Save?

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

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

Привязка данных разработана для поддержки этого? Существует ли общий шаблон для того, чтобы сделать так?

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

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

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

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

5
задан Mat 11 March 2010 в 21:54
поделиться

2 ответа

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

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

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

4
ответ дан 15 December 2019 в 00:57
поделиться

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

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

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

Удачи.

0
ответ дан 15 December 2019 в 00:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: