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!