2013-02-26 82 views
0

我需要在WinForm中引發對象事件。 當對象屬性已更改時,需要更改控制狀態(在UI中)。我如何在UI中引發對象事件?來自WinForm的調用對象事件

編輯:在窗體上我有2下拉菜單綁定到對象屬性。我需要在第一個選項爲false時禁用第二個下拉菜單。

+0

你必須更具體一些,或者你可以舉一個例子來更好地展示你的問題。 – 2013-02-26 09:33:35

+0

看看[INotifyPropertyChanged接口](http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx) – 2013-02-26 09:34:05

回答

0

如果對象已實現INotifyPropertyChanged,你可以做你的WinForm類中的以下內容:

yourObject.PropertyChanged += (s, e) => 
    { 
     if (e.PropertyName == "Name") { 
      //Check the value of the property here, etc... 
      button1.Enabled = false; 
     } 
    }; 

在這個例子中,Name是要monitorize財產。

+0

看起來像工作,但我可以在哪裏調用此代碼? – user1997418 2013-02-26 10:04:18

+0

您可以將此代碼放置在「Form」的構造函數中。 – 2013-02-26 10:04:55

+0

工程就像一個魅力!非常感謝你! – user1997418 2013-02-26 10:09:37

0

您不能引發對象的事件。只有對象可以提升它的事件。您只能訂閱對象的事件。爲什麼?因爲事件實際上是一對添加和刪除處理程序的方法。它與代理類型的屬性不同,您可以從任何地方調用它。

所以,你應該做一些事情,會導致對象提出該事件。無法直接舉辦活動。


這裏是INotifyPropertyChanged用法示例:

// your object 
public class Foo : INotifyPropertyChanged 
{ 
    private bool _bar; 

    public bool Bar 
    { 
     get { return _bar; } 
     set { 
      if (_bar == value) 
       return; 

      _bar = value; 
      OnPropertyChanged("Bar"); 
     } 
    } 

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

    public event PropertyChangedEventHandler PropertyChanged; 
} 

和綁定控件到該對象:

yourControl.DataBindings.Add("Enabled", foo, "Bar"); 

Bar屬性將被改變,Foo對象會引發事件,您的控制權將處理該事件。

+0

實際上,當object屬性設置爲false時,我需要禁用控制。所以我應該使用控件更改事件來處理對象事件? – user1997418 2013-02-26 09:40:16

+0

@ user1997418你能改變你的對象的源代碼嗎?如果是,那麼你可以通過你的對象實現'INotifyPropertyChanged'接口。當屬性發生更改時,使對象提高PropertyChanged事件。然後訂閱該事件並禁用控制。 – 2013-02-26 09:42:37

+0

那麼,我使用CSLA,它自己提高NotifyPropertyChanged。我只需要在對象屬性設置爲false時禁用表單中的控件。 – user1997418 2013-02-26 09:45:37