我有以下代码,它工作正常。
public partial class MainWindow : Window
{
Person person;
public MainWindow()
{
InitializeComponent();
person = new Person { Name = "ABC" };
this.DataContext = person;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
person.Name = "XYZ";
}
}
class Person: INotifyPropertyChanged
{
string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
OnPropertyChanged("Name");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string strPropertyName)
{
if(null != PropertyChanged)
{
PropertyChanged(this,
new PropertyChangedEventArgs(strPropertyName));
}
}
}
当我在MainWindow的构造函数中创建“person”对象时,它将为person的“Name”属性赋值,那时PropertyChanged事件为 NULL 。
如果在Button_Click事件中分配了相同的“person”类属性“Name”,则“PropertyChanged”事件为 NOT NULL ,并且它指向OnPropertyChanged。
我的问题是如何将“PropertyChanged”事件分配给OnPropertyChanged方法?
提前致谢。
答案 0 :(得分:5)
当您将对象设置为PropertyChanged
时,WPF数据绑定基础结构将添加DataContext
处理程序,以便检测您的属性的更改。
您可以通过setting a breakpoint观看此事。
它指向的OnPropertyChanged
方法是一个内部WPF方法,您可以通过检查委托的Target
属性来看到。
答案 1 :(得分:2)
在订阅某些内容之前,该事件将为null。当按钮点击事件发生时,它有一个订户(通过数据绑定系统)。