数据绑定是否支持Windows窗体中的嵌套属性?

我正在Windows窗体中编写测试应用程序。 它有一个简单的TextBoxforms,需要实现DataBinding。 我已经实现了FormViewModel类来保存我的数据,并且我的业务数据有一个类 – TestObject。

业务数据对象:

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)); } } 

视图模型:

 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)); } } 

属性:

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

所以现在我正在尝试将我的数据绑定到TextBox,如下所示:

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

令人惊讶的是,它不起作用! 当我更改CurrentObject或更改TestPropertyString属性时,没有任何更改。

但是当我使用它时它很好用:

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

所以我的问题是:数据绑定是否支持嵌套属性?

谢谢你的解释!

在.NET 4.0中更改了Databinding行为。 您的代码适用于.NET 3.5。 我发现此问题发布在Microsoft Connect: .Net 4.0简单绑定问题

这是为我工作的解决方法。 使用BindingSource作为数据对象:

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