example español databindings databinding databind data c# winforms data-binding

c# - español - ¿El enlace de datos admite propiedades anidadas en Windows Forms?



databindings c# (1)

El comportamiento de Databinding se modificó en .NET 4.0. Tu código funciona en .NET 3.5. Encontré este problema publicado en Microsoft Connect: .NET simple problema vinculante

Aquí estaba el trabajo que funcionó para mí. Use un BindingSource como el objeto de datos:

BindingSource bs = new BindingSource(_viewModel, null); //textBox1.DataBindings.Add("Text", _viewModel, "CurrentObject.TestPropertyString"); textBox1.DataBindings.Add("Text", bs, "CurrentObject.TestPropertyString");

Estoy escribiendo la aplicación de prueba en Windows Forms. Tiene un formulario simple con TextBox y necesita implementar DataBinding. Implementé la clase FormViewModel para guardar mis datos y tengo 1 clase para mis datos comerciales: TestObject.

Objeto Datos comerciales:

public class TestObject : INotifyPropertyChanged { private string _testPropertyString; public string TestPropertyString { get { return _testPropertyString; } set { if (_testPropertyString != value) { _testPropertyString = value; RaisePropertyChanged("TestPropertyString"); } } } public event PropertyChangedEventHandler PropertyChanged; public void RaisePropertyChanged(string propertyName) { if (PropertyChanged != null) PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }

ViewModel:

public class FormViewModel : INotifyPropertyChanged { private TestObject _currentObject; public TestObject CurrentObject { get { return _currentObject; } set { if (_currentObject != value) { _currentObject = value; RaisePropertyChanged("CurrentObject"); } } } public event PropertyChangedEventHandler PropertyChanged; public void RaisePropertyChanged(string propertyName) { if (PropertyChanged != null) PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }

Propiedad:

private FormViewModel _viewModel; public FormViewModel ViewModel { get { if (_viewModel == null) _viewModel = new FormViewModel(); return _viewModel; } }

Así que ahora estoy tratando de vincular mis datos a TextBox de esta manera:

TextBox.DataBindings.Add("Text", ViewModel, "CurrentObject.TestPropertyString");

¡Y sorprendentemente, no funciona! Nada cambia, cuando cambio CurrentObject o cambio la propiedad TestPropertyString.

Pero funciona muy bien, cuando uso:

TextBox.DataBindings.Add("Text", ViewModel.CurrentObject, "TestPropertyString");

Entonces mi pregunta es: ¿el enlace de datos admite propiedades anidadas?

Gracias por las explicaciones!