Grayson Mitchell
Grayson Mitchell

Reputation: 1187

Why is my "Event" always null?

I am trying to wire up a new event, but for some reason "Changed" is always evaluating to null

    public class MyTreeViewItem : INotifyPropertyChanged

{
        private MyTreeViewItem _parent;

        public MyTreeViewItem(MyTreeViewItem parent)
        {
            _parent = parent;
        }

        private bool _checked;
        public bool Checked
        {
            get
            {
                return _checked;
            }
            set
            {
                if (value != _checked)
                {
                    _checked = value;
                    OnChanged("test");
                    OnPropertyChanged("Checked");
                }
            }
        }

        public event EventHandler Changed;

        public ObservableCollection<MyTreeViewItem> Children { get; set; }

    // Invoke the Changed event; called whenever list changes
    protected virtual void OnChanged(string test)
    {
        if (Changed != null)
            Changed(this, null);
    }

Subscribing code (PropertyChanged Works, Changed does not)

_playgroupTree = new MyTreeViewItem(null);
AddChildNodes(4, ref _playgroupTree);
_playgroupTree.Changed += new EventHandler(_playgroupTree_Changed);
_playgroupTree.PropertyChanged += new PropertyChangedEventHandler(_playgroupTree_PropertyChanged);

Is really weird because I am also implementing INotifyPropertyChanged (which works), and this code is almost exactly the same (I have tried using the same deligate type, but still it does not work.

I have been using this website as a reference http://msdn.microsoft.com/en-us/library/aa645739%28VS.71%29.aspx

Upvotes: 8

Views: 23898

Answers (4)

Jon Skeet
Jon Skeet

Reputation: 1499760

Well, you haven't shown any code subscribing to the event. Where do you have code like this:

YourClass yc = new YourClass();
yc.Changed += SomeHandler;

? If you can produce a short but complete program demonstrating the problem, it will be a lot easier to diagnose.

Upvotes: 21

akonsu
akonsu

Reputation: 29538

you missed this:

List.Changed += new ChangedEventHandler(ListChanged);

Upvotes: 2

Bertvan
Bertvan

Reputation: 5033

Did you assign a value, or more specifically, an eventhandler, to Changed anywhere? It should be null if it wasn't assigned a value...

Upvotes: 1

anthony
anthony

Reputation: 41088

You must attach an event handler to the Changed event, only then will it not evaluate to null.

Changed += (s, e) => Console.WriteLine("received Changed event");
if (Changed != null) Console.WriteLine("now Changed is not null");

Upvotes: 3

Related Questions