0

我需要在 WinForm 中引发对象事件。更改对象属性时需要更改控件状态(在 UI 中)。如何在 UI 中引发对象事件?

编辑:在表单上,​​我有 2 个绑定到对象属性的下拉菜单。当第一个选择为假时,我需要禁用第二个下拉菜单。

4

2 回答 2

0

如果您反对已经实现INotifyPropertyChanged,您可以在您的WinForm类中执行以下操作:

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

在该示例中,Name是您要监视的属性。

于 2013-02-26T09:35:50.233 回答
0

你不能引发对象的事件。只有对象可以引发它的事件。您只能订阅对象的事件。为什么?因为 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 对象将引发事件,您的控件将处理该事件。

于 2013-02-26T09:35:35.850 回答