我使用 DataBindings 将域对象属性绑定到System.Windows.Forms.Label的Text属性:

Label l = new Label();
l.DataBindings.Add(new Binding("Text",myDomainObject,"MyProperty"));

但是,当我更改域对象时,Label不会反映更改。我知道对于像DataGridView这样的复杂控件,可以使用BindingSource完成绑定,我可以在其上调用ResetBindings,但是在标签的简单情况下我找不到任何更新绑定的方法。

有帮助吗?

解决方案

您的域对象应实现 INotifyPropertyChanged 绑定知道底层属性何时发生了变化。

其他提示

Kent有正确的答案,但我想在应用 INotifyPropertyChanged 界面时添加一点点。

要轻松举起活动,请尝试以下

protected void OnPropertyChanged<T>(Expression<Func<T>> property)
{
    if (this.PropertyChanged != null)
    {
        var mex = property.Body as MemberExpression;
        string name = mex.Member.Name;
        this.PropertyChanged(this, new PropertyChangedEventArgs(name));
    }
}

并将其应用为

{ // inside some method or property setter
    OnPropertyChanged(() => this.MyProperty);
}

这比通过名称指定属性更好的唯一原因是,如果您重构,或者只是更改属性的名称,您不必手动更改实现,但可以让编译器重命名所有引用自动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top