У меня есть форма с несколькими текстовыми полями и одной сеткой данных.Один бизнес-объект может быть привязан к этой форме.Например, BO выглядит следующим образом:
class BO : IEditableObject, INotifyPropertyChanged
{
public string FirstName {get; set;}
public string LastName {get; set}
public BindingList<BO> Relatives {get; set}
// implementation of the interfaces
}
Таким образом, в форме FirstName и LastName привязаны к текстовым полям, а Relatives - к сетке.Также на форме у меня есть кнопки Сохранить и Отменить.При нажатии кнопки «Сохранить» я вызываю IEditableObject.EndEdit (), а при нажатии кнопки «Отмена» я вызываю IEditableObject.CancelEdit ().Я хочу, чтобы метод CancelEdit () отклонял все изменения, сделанные пользователем, включая изменения в Relatives, который привязан к сетке.Пока все хорошо ..
НО Элемент управления сеткой использует CurrencyManager (на самом деле сетка является элементом управления Devexpress, но это не имеет значения, так как я считаю, что элемент управления WinForms также использует его).И CurrencyManager вызывает BeginEdit () & EndEdit () для элементов в коллекции Relatives каждый раз, когда пользователь изменяет строку.Таким образом, при нажатии кнопки Cancel () только изменения в FirstName и LastName будут отменены, поскольку для дочерних объектов в коллекции Relatives EndEdit () уже был вызван базовым CurrencyManger сетки!Итак, вопрос - как запретить CurrencyManager вызывать эти методы, чтобы я мог отклонить все изменения одним вызовом?
Спасибо!