Tengo una casilla de verificación de formas de ganar que está vinculada a una propiedad de una entidad Entity Framework.El valor de databound del cuadro de texto/casilla de verificación es incorrecto hasta que se valide el cuadro de texto/casilla de verificación
Así, por ejemplo, he bindingSource.DataSource = myDog
con una casilla de verificación vinculado a la propiedad IsSleeping
, de modo que cuando el usuario comprueba la caja, IsSleeping
se convierte en verdad, y cuando el usuario desactiva la casilla, IsSleeping
se convierte en falsa.
Esto funciona bien. El problema es que el valor de IsSleeping
no se actualiza hasta que se valida la casilla de verificación, que solo se produce cuando el foco mueve de distancia de la casilla a otra cosa. Por lo tanto, si quiero algo suceda cuando la caja no está marcada:
private void IsSleepingCheckbox_CheckedChanged(object sender, EventArgs e)
{
OnDogPropertyChanged(myDog);
MyAnimalEntities.SaveChanges();
}
myDog.IsSleeping
todavía habrá verdadera, hasta que se levantó después el Validated
de casilla de verificación. Por lo tanto, cuando el pobre myNaughtyKitty
(que está escuchando el evento DogPropertyChanged
) viene a comer fuera de myDog
pensando en el plato de comida myDog
está durmiendo, myDog
¡está realmente despertando! ¡Oh, no!
Lo que es peor, MyAnimalEntities.SaveChanges()
no ve los cambios en myDog
sin embargo, por lo que el valor de IsSleeping
no se guarda en la base de datos. Mover la llamada .SaveChanges()
a IsSleepingCheckbox_Validated
no resuelve este problema, ya que si la casilla de verificación se activa pero luego se cierra el formulario sin tener que mover el foco distancia de la casilla de verificación, la casilla de verificación no está validado y por lo tanto su estado no se guarda!
Imagino que este debe ser un problema bastante común con el enlace de datos y las casillas de verificación/cuadros de texto, y de hecho he encontrado un montón de publicaciones sobre el tema en línea, pero nadie parece tener una solución. ¿Alguien ha podido encontrar una solución para esto?
has salvado la vida después de horas de búsqueda en Google. Gracias. – superjugy