使用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
事件时,包含innerProperty
的MyProperty
类会捕获事件,并且还会引发自己的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实体,其属性通知更改并具有明确的字段。