tiene dos opciones:
- crear el objeto
Binding
manualmente y se unen a los Format
y Parse
eventos y cambie el valor de cada uno.
- Crear una propiedad adicional de la clase que sólo se invierte la lógica de la propiedad destinada
La primera opción es más limpio, la OMI, ya que no obliga a la API de la clase a seguir el diseño de su interfaz de usuario, aunque el la segunda opción es (marginalmente) más fácil.
Ejemplo de Opción 1
private void SwitchBool(object sender, ConvertEventArgs e)
{
e.Value = !((bool)e.Value);
}
...
Binding bind = new Binding("Checked", this.object, "SomeBool");
bind.Format += SwitchBool;
bind.Parse += SwitchBool;
CheckBox1.DataBindings.Add(bind);
Ejemplo de Opción 2
public class SomeClass
{
public bool SomeBool { get; set; }
public bool NotSomeBool
{
get { return !SomeBool; }
set { SomeBool = !value; }
}
}
...
CheckBox1.DataBindings.Add("Checked", this.object, "NotSomeBool");
Una vez más, estoy muy de opción a favor 1, ya que la opción 2 requiere que adaptar su clase a su Diseño de interfaz de usuario.
+1 Me gusta su primera opción, no lo sabía :-) – Javier
Conocía la opción 2, y probablemente debería haber mencionado que no quería poner la lógica de UI en mi modelo de dominio, por lo que no fue con eso Dicho esto, implementé la primera opción con éxito. Muchas gracias. Quiero señalar a cualquiera que pueda ver esto en el futuro: no puede agregar ese enlace a múltiples controles, uno debe crearse por control de UI (que es lo que quería hacer). –
+1 para la primera opción, estaba tratando de resolver lo mismo. Implementé una extensión y una clase específica 'BooleanBinding' donde puedes definir si deseas unir lo opuesto o no según tu solución. Bloggeé sobre esto aquí: http://codewithpassion.blogspot.com/2010/11/binding-to-opposite-value-of-boolean.html –