简体   繁体   中英

C# event from a class in a custom usercontrol never fires

I have a class that has an event that's suppose to fire everytime one of it's property changes.

    public event EventHandler StructureChanged;
    protected virtual void NotifyStructureChanged(EventArgs e)
    {
        if (StructureChanged != null)
        {
            StructureChanged(this, e);
        }
    }

I include NotifyStructureChanged(new EventArgs()); in my set statement in my properties. whenever it calls the method the StructureChanged is always null. My class is a private member in a custom usercontrol and the class event is registered in the constructor of the usercontrol like so

_pt.StructureChanged += _pt_StructureChanged;

and handled here

    void _pt_StructureChanged(object sender, EventArgs e)
    {
        UpdateControl();
    }

What I have so far is a custom class with an event that's a private member of a custom user control. I register my class event in the custom usercontrol. Whenever the class property changes, I update my control to reflect the changes in the class.

What am I doing wrong here? I have a button on my usercontrol and am able to register that event, why can't I register my class event?

If StructureChanged is null than you attach event handler after event was fired (or you are detaching handler somewhere).

Also don't pass EventArgs - its just useless dummy parameter.

public event EventHandler StructureChanged;

protected virtual void OnStructureChanged()
{
    if (StructureChanged != null)        
        StructureChanged(this, EventArgs.Empty);        
}

And call this method in setter:

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

       _bar = value;
       OnStructureChanged();
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM