繁体   English   中英

即使我注册后,Property Change事件也为null

[英]Property Change event is null even after I registered it

当其中的特定对象的变量发生任何变化时,我使用INotifyPropertyChanged来通知类。

以下是课程:

 public class MyClass
 {
        public SecClass MyObj { get; set; }

     //A few more variables
 }

SecClass:

 public class SecClass:INotifyPropertyChanged
 {
    private bool _noti= false;

    public bool Noti
    {
        get { return _noti; }
        set
        {
            _noti= value;
            NotifyPropertyChanged("Noti");
        }
    }

     //A few more variables
    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(string name)
    {
      if (PropertyChanged != null)
      {
       PropertyChanged(this, new PropertyChangedEventArgs(name));
       }
    }
 }

在这里我的功能,使事件注册:

    public void Register()
    {
      MyObj.PropertyChanged += MyObj_PropertyChanged;         
    }

功能正常工作并完成注册,但是当涉及到更改时,它会将Property Change显示为null(我想在某处注册被删除,在发生更改之前,我该如何检查?)

我把它连在一起:

static class Program
{
    static void Main()
    {
        var c = new MyClass();
        c.MyObj = new SecClass();
        c.Register();
        c.MyObj.Noti = !c.MyObj.Noti;
    }
}

添加(用于说明):

private void MyObj_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    Console.WriteLine(e.PropertyName);
}

MyClass ,和:

public event PropertyChangedEventHandler PropertyChanged;

SecClass (让他们编译),它工作正常 - 在运行时打印"Noti" 一种理论线程的比赛,却是任何理智的使用不太可能,但建议的用法是:

var handler = PropertyChanged;
if (handler != null)
{
    handler(this, new PropertyChangedEventArgs(name));
}

另外,对于info:如果你将[CallerMemberName]添加到那个,你不需要明确指定属性:

private void NotifyPropertyChanged([CallerMemberName] string name = null) {...}

有:

NotifyPropertyChanged(); // the compiler adds the "Noti" itself

但从根本上说:“无法再现” - 它运作正常。 我想知道它是否与您的PropertyChanged实现相关,因为您实际上没有显示它。 特别是,我想知道你是否真的有两个事件:一个明确实现。 这意味着你的演员会得到不同的对待。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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