繁体   English   中英

使用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事件时,包含innerPropertyMyProperty类会捕获事件,并且还会引发自己的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM