Reputation: 1187
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
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
Reputation: 29538
you missed this:
List.Changed += new ChangedEventHandler(ListChanged);
Upvotes: 2
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
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