uso tutorial net example databinding bindingnavigator c# .net winforms entity-framework data-binding

tutorial - datagridview c# bindingsource



Usar BindingSource para enlazar a propiedades anidadas, o hacer entidades vinculables (3)

¿Se modificaron sus propiedades a través del mismo contexto utilizado por la interfaz de usuario?

Si es así, edite el archivo T4 que usa para crear sus entidades.
- Haga que cree entidades INotifyPropertyChanged, con propiedades que notifiquen los cambios y tengan un campo explícito detrás.

La vinculación a una propiedad anidada es bastante fácil:

checkBox1.DataBindings.Add(new Binding("Checked", bindingSource, "myProperty")); //Normal binding checkBox2.DataBindings.Add(new Binding("Checked", bindingSource, "myProperty.innerProperty")); //Nested property

Sin embargo, cuando se modifica myProperty.innerProperty , no se genera ningún evento: nunca se notifica a BindingSource sobre el cambio.

He read que la solución es "asegurarse de que cuando el objeto innerProperty genera el evento PropertyChanged , la clase MyProperty que contiene innerProperty captura el evento y también genera un evento PropertyChanged propio".

Sin embargo, el framework de entidades no hace esto por mí , y prefiero no pasar por cada instancia de cada clase y conectar un método personalizado a cada propiedad de navegación, solo para hacer que mis clases sean enlazables. ¿Hay una solución decente para hacer que las entidades sean vinculables?


Puede probar POCO Entity Generator o la característica EF Code-First, que todavía está en CTP .

Sin embargo, ambos enfoques requieren EF4.


Tienes que implementar INotifyPropertyCHanged en tu clase.

Su propiedad debe verse algo como esto.

private bool _checked; public bool Checked { get { return _checked; } set { if (value != _checked) { _checked = value; OnPropertyChanged("Checked"); } } } public event PropertyChangedEventHandler PropertyChanged; public virtual void OnPropertyChanged(string propertyName) { var handler = PropertyCHanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } }

No estoy seguro de si esto funciona para winforms. Funciona para WPF y Silverlight.