使用BindingSource绑定到嵌套属性 – 或者,使实体可绑定

绑定到嵌套属性很容易:

checkBox1.DataBindings.Add(new Binding("Checked", bindingSource, "myProperty")); //Normal binding checkBox2.DataBindings.Add(new Binding("Checked", bindingSource, "myProperty.innerProperty")); //Nested property 

但是,当更改myProperty.innerProperty时,不会引发任何事件 – 从不通知BindingSource更改。

我已经读过 ,解决方法是“确保当innerProperty对象引发PropertyChanged事件时,包含innerPropertyMyProperty类会捕获事件,并且还会引发自己的PropertyChanged事件。”

但是,entity framework不会为我做这个,我宁愿不经历每个类的每个实例,并将自定义方法连接到每个导航属性,只是为了使我的类可绑定。 是否有一个体面的解决方法来使实体可绑定?

你必须在你的课上实现INotifyPropertyCHanged。

你的财产应该是这样的。

 private bool _checked; public bool Checked { get { return _checked; } set { if (value != _checked) { _checked = value; OnPropertyChanged("Checked"); } } } public event PropertyChangedEventHandler PropertyChanged; public virtual void OnPropertyChanged(string propertyName) { var handler = PropertyCHanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } } 

我不确定这是否适用于winforms。 它适用于WPF和Silverlight。

您可以尝试使用POCO实体生成器或仍在CTP中的EF Code-Firstfunction。

两种方法都需要EF4。

您的属性是否通过UI使用的相同上下文进行了更改?

如果是这样,请编辑用于创建实体的T4文件。
– 使其创建INotifyPropertyChanged实体,其属性通知更改并具有明确的字段。