Properties.Settings.Save () сохраняет только при первом вызове - PullRequest
2 голосов
/ 25 февраля 2010

У меня есть DataGridView, заполненный BindingList. Этот список сохраняется в файле настроек. Сохраняет и загружает правильно ... но сохранит только при первом вызове Properties.Settings.Save(). После этого вызов Save() ничего не сделает.

Я проверил, что Save() вызывается, и что в то время, когда он называется, BindingList содержит правильные данные. Независимо от того, добавляю я, удаляю или редактирую элементы списка, он будет сохранен только в user.config при первом вызове. После этого user.config даже не открывается для редактирования.

Кто-нибудь знает, почему это произошло?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2010

Я случайно нашел решение, хотя не знаю, почему оно работает.

Кажется, что вызов Settings.Default.MyBindingList.ResetBindings() или Settings.Default.MyBindingList.ResetItem(1) ( не имеет значения, какой номер передается ResetItem()), прежде чем вызов Save() решит проблему.

BindingList не должен помечать свои значения как измененные, даже если элементы в списке правильно реализуют INotifyPropertyChanged.

Примечательно, что вызов Settings.Default.MachineList.Machines.EndNew(1) также решает проблему (!?!). Из документации :

Метод EndNew фиксирует ожидающий новый элемент, который был добавлен с помощью метода AddNew. Если нет нового элемента, ожидающего подтверждения, этот метод ничего не делает.

Может кто-нибудь пролить свет на это? Я что-то не так делаю, или это ошибка в DataGridView или BindingList (или, возможно, в Settings провайдере)?

0 голосов
/ 25 февраля 2010

Вызов Save устанавливает свойство IsDirty класса, представляющего свойство пользователя, в false. Это свойство проверяется перед сохранением пользовательского свойства на диск.

Если вам нужно несколько раз вызвать Save, установите для свойства IsDirty значение true:

Properties.Settings.Default.PropertyValues["property name"].IsDirty = true;
...