2

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

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

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

4

2 回答 2

7

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);
}

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

于 2011-02-23T19:39:11.700 回答
3

您的域对象应该实现INotifyPropertyChanged以便绑定知道基础属性何时更改。

于 2009-01-04T18:56:34.000 回答