Muchas veces, con el objetivo de mejorar la modularidad (y por tanto la abstracción, reutilización, etc.) de nuestro código, nos vemos en noble tarea de encapsular un grupo de Controles en un User Control. Cosa fácil si uno sabe arrastrar, colocar, copiar y pegar. :P
Sin embargo, cuando la cosa va de enlazar propiedades de este a datos, nos vemos en cierta dificultad que nos proponemos a resolver.
Aparentemente, nos han enseñado que si queremos que una propiedad sea enlazable a datos, debemos marcar esta con los siguientes atributos: bindable y browsable
[Bindable(true)]
[Browsable(true)]
public string Propiedad
{
get { return propiedadTextBox.Text; }
set { propiedadTextBox.Text = value; }
}
Así, en el apartado (DataBindings) de la ventada de propiedades aparecera nuestra propiedad y nos permitirá enlazarla a un bindingSource que tengamos en la clase sobre la que estemos trabajando.
Por tanto, en lo que se refiere a “tiempo de diseño” ya hemos acabado y se puede utilizar en el diseñador.
Sin embargo, para que funcione el enlace a datos, tendremos que añadir unas lineas extra de código: añadimos un evento de la siguiente forma: PropiedadChanged y buscar un momento.
public event System.EventHandler PropiedadChanged;
*Puede ser EventHandler o que herede cualquier otro delegado… pero lo hemos puesto así por ser lo más genéricos posibles.
Además de crear el evento, debemos lanzarlo! Si no lanzamos el evento en ningún momento, los cambios no serán reflejados en el Binding Source.
Sabiendo esto, ya podremos encapsular y agrupar controles y tener ser más productivos.
Happy coding!

Hola, estoy muy interesado en este artículo y me gustaría saber si podrías enviarme o publicar un ejemplo completo puesto que no se muy bien cuando hay que lanzar el evento que se crea para cada propiedad. Mi intención es crear un componente personalizado que herede del textbox y que su propiedad miText equivalente a Text sea “bindable”. Yo programo en vb pero supongo que si lo subes en C# (porque eso es C# no??) seré capaz de “traducirlo” a vb.
Muchas gracias de antemano
Claro, como no. Mira en tu email.
Hola, muchas gracias por responder tan rápido. Gracias a tu ayuda he podido hacer lo que estaba intentado desde hacia un buen tiempo. Un saludo…
Hola, no sé si la solución que propones me servirá. Te explico mi dolor de cabeza: Tengo un textbox personalizado enlazado en su propiedad Text a un dataset, hasta aquí todo normal. El caso es que cuando pretendo ejecutar un suspendbinding o un resumebinding del bindingmanagerbase del formulario la ejecución se detiene y el visor de excepciones me advierte lo siguiente: “DataBinding no puede encontrar en la lista la fila adecuada para todos los enlaces”. Lo más aproximado que me haya dado algo de luz al respecto dice que el problema es del control textbox personalizado y lo que busco es algo de código que me de luz al respecto. Tal vez el código que has enviado a mi predecesor en la lista me aclare algo. Gracias por todo.
Olé
Gracias mil.
Jesús
Tal vez puedas indicarme algún libro donde se expliquen todas estas “curiosidades” o, más en serio, donde se estudie qué significan, cómo se aplican y complementan las diferentes interfaces que se necesitan para crear complementos, controles etc. con solidez . ¿Quién, que no sea un figura como tú, iba a saber que hay que activar el evento para que el binding no se queje?. Porque quejar ya no se queja pero yo no sé por qué.
Renuevo mi gratitud.
Mil gracias
Jesús
Esto lo he aprendido “decompilando” el Framework. Utilizando el visor de interfaces que integra el Visual Studio así como el navegador que trae para ver todos los métodos, clases, etc… en otras palabras: un poco de ingeniería inversa.
Vamos, un trabajo de chinos y de dedicarle mucho tiempo.
¿Libros? No conozco ninguno, pero posiblemente habrá alguno… sería lo lógico.
Un saludo.
Hola, me podrías facilitar el ejemplo del que hablan, gracias! me gustaría aprender más sobre vs ya que no tengo mucho desarrollando con el, toda buena práctica creo me servirá bastante, y si pudieras aconsejarme algunos tips para mejorar rápido te lo agradecería mucho, bueno, gracias de nuevo por tu atención, hasta pronto!
Hola estoy interesado en el desarrollo del control que has realizado ya que estoy intentando realizar un control simple, el cual contenga una imagenbutton y un textbox, en el que estos dos componetes puedan ser enlazados a un origen de datos, si se desea.
Ya que trabajo en C# en Visual Studio
Gracias por tu tiempo
Buenos dias:
Tengo la necesidad de crear barra de navegacion entre registros que esten en clases separadas para recorrer dataset, pero a la hora de usar el bindingcontext y crear un objeto bindingmanagerbase la clase no ve el contexto del formulario.
Tendrias un ejemplo de como hacer esto y perdon por el atrevimiento pero podrias mandarmelo a mi correo.
Estoy aprendiendo y vengo de Visual Fox y estoy muy interesado en desarrolar en C#
Muchas gracias
Gustavo Real
Esto no es un foro, por favor, dejen de pedir cosas.
Hola Rafa
Me puedes enviar el ejemplo en C#?
Desde ya, muchas gracias y mis saludos
Victor