我需要在WinForm中引发对象事件。 当对象属性发生更改时,需要更改控件状态(在UI中)。如何在UI中引发对象事件?
编辑:在表单上我有2个下拉列表绑定到对象属性。当第一个选择为false时,我需要禁用第二次下拉。
答案 0 :(得分: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对象将引发事件,您的控件将处理该事件。
答案 1 :(得分:0)
如果您的对象已经实现INotifyPropertyChanged
,则可以在WinForm
类中执行以下操作:
yourObject.PropertyChanged += (s, e) =>
{
if (e.PropertyName == "Name") {
//Check the value of the property here, etc...
button1.Enabled = false;
}
};
在该示例中,Name
是您要监控的属性。