[英]How to bind a Navigation Property (second level properties) in DataGridView using BindingSource?
[英]Using BindingSource to bind to Nested Properties - or, Making Entities Bindable
綁定到嵌套屬性很容易:
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
事件。”
但是,實體框架並沒有為我做這個,我寧願不經歷每個類的每個實例,並將自定義方法連接到每個導航屬性,只是為了使我的類可綁定。 是否有一個體面的解決方法來使實體可綁定?
你必須在你的課上實現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實體生成器或EF代碼優先功能,它仍然在CTP中 。
這兩種方法都需要EF4。
您的屬性是否通過UI使用的相同上下文進行了更改?
如果是這樣,請編輯用於創建實體的T4文件。
- 使其創建INotifyPropertyChanged實體,其屬性通知更改並具有明確的字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.