我需要在 WinForm 中引发对象事件。更改对象属性时需要更改控件状态(在 UI 中)。如何在 UI 中引发对象事件?
编辑:在表单上,我有 2 个绑定到对象属性的下拉菜单。当第一个选择为假时,我需要禁用第二个下拉菜单。
如果您反对已经实现INotifyPropertyChanged
,您可以在您的WinForm
类中执行以下操作:
yourObject.PropertyChanged += (s, e) =>
{
if (e.PropertyName == "Name") {
//Check the value of the property here, etc...
button1.Enabled = false;
}
};
在该示例中,Name
是您要监视的属性。
你不能引发对象的事件。只有对象可以引发它的事件。您只能订阅对象的事件。为什么?因为 event 实际上是一对用于添加和删除处理程序的方法。它与委托类型的属性不同,您可以从任何地方调用它。
因此,您应该做一些会导致对象引发该事件的事情。没有办法直接引发事件。
这是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 对象将引发事件,您的控件将处理该事件。