我有一个非常简单的问题,但让我头痛,我浪费了太多时间。无论如何我已经没想完了:)
出于某种原因,我无法将我的属性变量的值传递给我的事件处理程序。这是我得到的,对我来说一切都很好,但它不会工作:(
知道为什么它没有传递变量的实际值?在此先感谢:)
答案 0 :(得分:0)
顾名思义,propertyName
应该包含属性的名称,而不是值。有关详情,请参阅MSDN上的PropertyChangedEventHandler和PropertyChangedEventArgs。
至于为什么你的事件处理程序null
,我怀疑你还没有订阅它。您应该在程序中的某处具有以下内容:
obj.PropertyChanged += new PropertyChangedEventHandler(obj_PropertyChanged);
private void obj_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
....
}
然后当obj.Moves
更改obj_PropertyChanged
时会被调用。
我理解你的困惑,所以让我再解释一下。假设您有两个类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)
{
....
}
}
通过上述内容,只要B.a_PropertyChanged
发生更改,就会调用A.Moves
。更确切地说,如果b
是B
的实例,则只要b.a_PropertyChanged
发生更改,就会调用b.a.Moves
。另请注意我的Moves
设置器的实现与您的实现有何不同。