У меня есть флажок winforms, который привязан к свойству сущности Entity Framework.
Так, например, у меня есть bindingSource.DataSource = myDog
с флажком, связанным со свойством IsSleeping
, так что когда пользователь устанавливает флажок, IsSleeping
становится истинным, а когда пользователь снимает флажок, IsSleeping
становится ложь.
Это отлично работает. Проблема заключается в том, что значение IsSleeping
не обновляется до тех пор, пока флажок не будет подтвержден, что происходит только тогда, когда фокус перемещается на от от флажка к чему-либо другому. Таким образом, если я хочу, чтобы что-то произошло, когда флажок снят:
private void IsSleepingCheckbox_CheckedChanged(object sender, EventArgs e)
{
OnDogPropertyChanged(myDog);
MyAnimalEntities.SaveChanges();
}
myDog.IsSleeping
будет по-прежнему верным до тех пор, пока флажок Validated
не будет повышен. Таким образом, когда бедный myNaughtyKitty
(который слушает событие DogPropertyChanged
) приходит поесть из пищевого блюда myDog
, думая, myDog
спит, myDog
действительно просто просыпается вверх! О, нет!
Еще хуже , MyAnimalEntities.SaveChanges()
пока не видит изменений в myDog
, поэтому значение IsSleeping
никогда не сохраняется в базе данных. Перемещение вызова .SaveChanges()
на IsSleepingCheckbox_Validated
не решает эту проблему, потому что если флажок установлен, но форма закрыта, не перемещая фокус из флажка, флажок никогда проверено и, следовательно, его состояние никогда не сохраняется!
Я полагаю, что это, должно быть, довольно распространенная проблема с привязкой данных и флажками / текстовыми полями, и действительно, я нашел в Интернете массу постов на эту тему, но, похоже, ни у кого не было решения. Кто-нибудь смог найти обходной путь для этого?