我似乎找不到一个简单明了的解释,来说明如何使用数据绑定将WinForms应用程序中的控件绑定到嵌套对象。例如:
class MyObject : INotifyPropertyChanged
{
private string _Name;
public string Name
{
get { return _Name; }
set
{
_Name = value;
OnPropertyChanged("Name");
}
}
private MyInner _Inner;
public MyInner Inner
{
get { return _Inner; }
set
{
_Inner = value;
OnPropertyChanged("Inner");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
class MyInner : INotifyPropertyChanged
{
private string _SomeValue;
public string SomeValue
{
get { return _SomeValue; }
set
{
_SomeValue = value;
OnPropertyChanged("SomeValue");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
现在想象一个只有两个文本框的表单,第一个用于名称,第二个用于Inner.SomeValue。我很容易让绑定工作在Name上,但是Inner.SomeValue不稳定。如果我填充对象然后设置绑定,它会在文本框中显示Inner.SomeValue,但我无法编辑它。如果我从未初始化Inner的新对象开始,我似乎无法使数据保留在Inner.SomeValue中。
我已经在MSDN和StackOverflow上检查了所有内容,并进行了数十次使用不同关键字的搜索。每个人都想谈论与数据库或DataGrid的绑定,大多数示例都是使用XAML编写的。
更新:我尝试了Marc的完整测试工具,并取得了部分成功。如果我点击"all change!"按钮,我似乎能够将数据写回内部对象。但是,从MyObject.Inner null开始,它不知道如何创建内部对象。我认为现在,我可以通过确保我的内部引用始终设置为有效对象来解决它。尽管如此,我仍然感觉自己错过了什么 :)