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
changes
obj\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中调用它。实现它的类会自动订阅它。