[英]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.