Tengo un campo binario en mi base de datos que es difícil de describir en una interfaz de usuario con una única casilla de verificación tipo "¿Es XXXX?". Prefiero usar un par de botones de radio (por ejemplo, "Hazlo a la manera de Foo" y "Hazlo a la manera de Bar"), pero ahora todos los demás campos de mi formulario están vinculados a un objeto de negocio. También me gustaría vincular los dos botones de radio al objeto comercial, pero todavía no se me ocurrió una buena manera de hacerlo. Puedo vincular uno de los botones al campo, de modo que el campo esté configurado como "verdadero" si se selecciona el botón, pero al seleccionar el otro botón se deselecciona el primero (es decir, los dos botones de radio están emparejados correctamente)), el valor del campo no se actualiza para reflejar esto.¿Cómo uso el enlace de datos con los botones de radio de Windows Forms?
Me gustaría poder decir
button1.DataBindings.Add(new Binding("checked", source, "useFoo"));
button2.DataBindings.Add(new Binding("checked", source, "!useFoo"));
pero estoy bastante seguro de que va a tirar cuando se ejecuta. ¿Hay una manera más fácil, o debería poner más pensamiento en cómo redactar una sola casilla de verificación? No quiero agregar funciones adicionales para manejar algo tan trivial ...
ETA: Un comentarista ha sugerido considerar un menú desplegable (ComboBox). Había pensado en esto, pero ¿cómo vincularía los datos a un campo booleano en una base de datos/Propiedad en un objeto comercial? Si vinculo el SelectedItem a la propiedad useFoo, ¿qué iría en la colección Items? ¿Tendría que agregar solo "Verdadero" y "Falso", o podría de alguna manera agregar un objeto de par clave/valor que vincule un elemento mostrado ("Usar Foo"/"No usar Foo") con el valor booleano detrás de él? Tengo problemas para encontrar documentos sobre esto.
Acerca de la respuesta: la solución terminé usando involucrada la modificación del objeto de negocio - la idea básica es muy similar a la publicada por Gurge, pero se me ocurrió por separado antes de leer su respuesta. En resumen, agregué una propiedad separada que simplemente devuelve !useFoo
. Un botón de radio está vinculado a source.UseFoo
, y el otro está vinculado a source.UseBar
(el nombre de la nueva propiedad). Es importante asegurarse de que la nueva propiedad tenga getters y setters, o terminará con un comportamiento realmente extraño.
¡Y no olvide hacer este cambio de nuevo cada vez que edite su DataSet! :-( – Mac