2012-06-07 29 views
0

所以基本上我有一個窗體上的組合框,我通過添加名爲「類別」的自定義對象並將DisplayMember設置爲我的對象的屬性「名稱」來填充。如何捕獲ComboBox中的Object的事件?

在另一個可以同時打開的窗體上,我可以編輯這些「Category」對象的名稱。我提出一個事件,「NameChanged」,但我怎麼能捕捉它包含組合框的形式?

即使對象「類別」的屬性「名稱」發生更改,ComboBox上的顯示也不會自動更新。所以我需要抓住這個事件,但我不知道該怎麼做。

感謝任何能幫助我的人。

回答

0

如果您讓Category類實現INotifyPropertyChanged,則可以在屬性更改時處理事件。

要做到這一點,你有你的財產從一個簡單的屬性更改:

// will NOT raise event 
public string Name { get; set; } 

到更多的東西,如:

// will raise event 
public string Name 
{ 
    get { return _Name; } 
    set 
    { 
     if (_Name != value) 
     { 
      _Name = value; 
      OnPropertyChanged("Name"); 
     } 
    } 
} 
private string _Name; 

,然後在你的類以及執行INotifyPropertyChanged:

public event EventHandler<PropertyChangedEventArgs> PropertyChanged; 

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, e); 
    } 
    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); 
    } 

現在,當向您的ComboBox添加一個Category對象時,訂閱Pro每次Name屬性更改時都會引發pertyChanged事件。

一個更好的方法

考慮使用Binding類來填充組合框。綁定自動使用INotifyPropertyChanged在屬性值更改時更新顯示。

+0

謝謝您的回覆。我現在試圖用數據綁定重新編碼我的組合框。 – user1428252

+0

我做不到。我必須使用ComboBox.DataBindings.Add方法嗎?如果是,如何使用它,因爲我嘗試了很多方法,我無法使它工作。我的數據源是繼承列表(類別)的類。 – user1428252

+0

我的大部分數據綁定經驗都在WPF和Silverlight中。從WinForms和綁定開始的一些好的地方是:http://stackoverflow.com/questions/29654/winforms-databinding-and-foreign-key-relationships和http://stackoverflow.com/questions/454959/winforms-databinding –