我需要在WinForm中引發對象事件。 當對象屬性已更改時,需要更改控制狀態(在UI中)。我如何在UI中引發對象事件?來自WinForm的調用對象事件
編輯:在窗體上我有2下拉菜單綁定到對象屬性。我需要在第一個選項爲false時禁用第二個下拉菜單。
我需要在WinForm中引發對象事件。 當對象屬性已更改時,需要更改控制狀態(在UI中)。我如何在UI中引發對象事件?來自WinForm的調用對象事件
編輯:在窗體上我有2下拉菜單綁定到對象屬性。我需要在第一個選項爲false時禁用第二個下拉菜單。
如果對象已實現INotifyPropertyChanged
,你可以做你的WinForm
類中的以下內容:
yourObject.PropertyChanged += (s, e) =>
{
if (e.PropertyName == "Name") {
//Check the value of the property here, etc...
button1.Enabled = false;
}
};
在這個例子中,Name
是要monitorize財產。
看起來像工作,但我可以在哪裏調用此代碼? – user1997418 2013-02-26 10:04:18
您可以將此代碼放置在「Form」的構造函數中。 – 2013-02-26 10:04:55
工程就像一個魅力!非常感謝你! – user1997418 2013-02-26 10:09:37
您不能引發對象的事件。只有對象可以提升它的事件。您只能訂閱對象的事件。爲什麼?因爲事件實際上是一對添加和刪除處理程序的方法。它與代理類型的屬性不同,您可以從任何地方調用它。
所以,你應該做一些事情,會導致對象提出該事件。無法直接舉辦活動。
這裏是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對象會引發事件,您的控制權將處理該事件。
實際上,當object屬性設置爲false時,我需要禁用控制。所以我應該使用控件更改事件來處理對象事件? – user1997418 2013-02-26 09:40:16
@ user1997418你能改變你的對象的源代碼嗎?如果是,那麼你可以通過你的對象實現'INotifyPropertyChanged'接口。當屬性發生更改時,使對象提高PropertyChanged事件。然後訂閱該事件並禁用控制。 – 2013-02-26 09:42:37
那麼,我使用CSLA,它自己提高NotifyPropertyChanged。我只需要在對象屬性設置爲false時禁用表單中的控件。 – user1997418 2013-02-26 09:45:37
你必須更具體一些,或者你可以舉一個例子來更好地展示你的問題。 – 2013-02-26 09:33:35
看看[INotifyPropertyChanged接口](http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx) – 2013-02-26 09:34:05