题
我使用 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);
}
这比通过名称指定属性更好的唯一原因是,如果您重构,或者只是更改属性的名称,您不必手动更改实现,但可以让编译器重命名所有引用自动。
不隶属于 StackOverflow