对于如何使用数据绑定将 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));
}
}
}
现在想象一个只有两个文本框的表单,第一个用于 Name,第二个用于 Inner.SomeValue。我可以很容易地绑定到 Name,但是 Inner.SomeValue 是不稳定的。如果我填充对象然后设置绑定,它会在文本框中显示 Inner.SomeValue 但我无法编辑它。如果我从一个新对象开始而不初始化 Inner,我似乎无法将数据粘贴到 Inner.SomeValue 中。
我查遍了 MSDN、StackOverflow 和几十个不同关键字的搜索。每个人都想谈论绑定到数据库或 DataGrids,并且大多数示例都是用 XAML 编写的。
更新:我已经尝试了 Marc 的完整测试工具并取得了部分成功。如果我点击“全部改变!” 按钮,我似乎能够写回内部对象。但是,从 MyObject.Inner null 开始,它不知道如何创建内部对象。我认为现在,我可以通过确保我的内部引用始终设置为有效对象来解决它。尽管如此,我还是忍不住觉得我错过了一些东西:)