2009-01-04 87 views
2

我結合域對象的屬性,使用System.Windows.Forms.Label的Text屬性DataBindings如何刷新Windows窗體控件的簡單綁定?

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

但是,當我改變域對象,標籤不反映更改。我知道對於像DataGridView這樣的複雜控件,綁定可以使用BindingSource來完成,我可以在其上調用ResetBindings,但是我找不到任何方法來更新標籤簡單情況下的綁定。

回答

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

的唯一原因,這是不是按名稱指定屬性更好的是,如果你重構,或者只是更改屬性的名稱,您不必手動更改實現,但可以讓編譯器自動重命名所有引用。