C# 为什么我的事件处理程序为空?
我有一个很简单的问题,但让我头痛,我浪费了太多的时间。不管怎样,我已经没有主意了:) 由于某些原因,我无法将属性变量的值传递给事件处理程序。这是我所拥有的,对我来说一切都很好,但它不起作用:(C# 为什么我的事件处理程序为空?,c#,events,delegates,inotifypropertychanged,C#,Events,Delegates,Inotifypropertychanged,我有一个很简单的问题,但让我头痛,我浪费了太多的时间。不管怎样,我已经没有主意了:) 由于某些原因,我无法将属性变量的值传递给事件处理程序。这是我所拥有的,对我来说一切都很好,但它不起作用:( 知道它为什么不传递变量的实际值吗?请提前感谢:)正如名称所示,propertyName应该包含属性的名称,而不是值。有关更多详细信息,请参见MSDN上的和 至于为什么您的事件处理程序null,我怀疑您还没有订阅它。您的程序中应该有如下内容: obj.PropertyChanged += new Prop
知道它为什么不传递变量的实际值吗?请提前感谢:)正如名称所示,
propertyName
应该包含属性的名称,而不是值。有关更多详细信息,请参见MSDN上的和
至于为什么您的事件处理程序null
,我怀疑您还没有订阅它。您的程序中应该有如下内容:
obj.PropertyChanged += new PropertyChangedEventHandler(obj_PropertyChanged);
private void obj_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
....
}
然后,当obj.Moves
changesobj\u属性changed
将被调用
我理解你的困惑,所以让我再解释一下。假设您有两个类A
和B
,并且希望B
在A
的属性更改时收到通知。然后您可以使A
实现INotifyPropertyChanged,并使B
订阅A
的PropertyChanged事件,如下所示:
public class A: INotifyPropertyChanged
{
private int moves;
public int Moves
{
get { return moves; }
set
{
if (value != moves) {
moves = value;
OnPropertyChanged("Moves");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public class B
{
private A a = new A();
public B()
{
a.PropertyChanged += new PropertyChangedEventHandler(a_PropertyChanged);
}
private void a_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
....
}
}
使用上述方法,只要
a.Moves
发生更改,就会调用B.a\u属性changed
。更准确地说,如果b
是b
的一个实例,那么只要b.a.Moves
发生更改,就会调用b.a\u属性changed
。另外,请注意我的移动设置器的实现与您的不同。您是否在任何地方为该事件分配了处理程序?您所说的“变量的实际值”是什么意思?我们可以清楚地看到字符串“Moves”已经传递给onPropertyChanged
方法。问题的标题表示您想知道事件是否为空,您能否澄清问题的具体内容?事件处理程序为null,因为没有人向其添加事件处理程序。它的接口INotifyPropertyChanged,因此在对象的setter中调用它。实现它的类会自动订阅它。