如何分配INotifyPropertyChanged的PropertyChanged事件?

时间:2011-09-16 02:06:09

标签: wpf data-binding interface inotifypropertychanged

我有以下代码,它工作正常。

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方法?

提前致谢。

2 个答案:

答案 0 :(得分:5)

当您将对象设置为PropertyChanged时,WPF数据绑定基础结构将添加DataContext处理程序,以便检测您的属性的更改。
您可以通过setting a breakpoint观看此事。

它指向的OnPropertyChanged方法是一个内部WPF方法,您可以通过检查委托的Target属性来看到。

答案 1 :(得分:2)

在订阅某些内容之前,该事件将为null。当按钮点击事件发生时,它有一个订户(通过数据绑定系统)。