簡體   English   中英

為什么我的“事件”總是為空?

[英]Why is my “Event” always null?

我正在嘗試連接一個新事件,但出於某種原因,“Changed”總是評估為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);
    }

訂閱代碼(PropertyChanged Works,Changed沒有)

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

真的很奇怪,因為我也在實現INotifyPropertyChanged(它的工作原理),這段代碼幾乎完全一樣(我嘗試使用相同的deligate類型,但它仍然不起作用。

我一直在使用這個網站作為參考http://msdn.microsoft.com/en-us/library/aa645739%28VS.71%29.aspx

好吧,你沒有顯示任何訂閱該事件的代碼。 你在哪里有這樣的代碼:

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

如果您可以生成一個簡短但完整的程序來演示問題,那么診斷起來會容易得多。

您必須將事件處理程序附加到Changed事件,然后才會將其評估為null。

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

你錯過了這個:

List.Changed += new ChangedEventHandler(ListChanged);

您是否在任何地方為Changed分配了一個值,或者更具體地說,是一個事件處理程序? 如果沒有賦值,它應該為null ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM