INotifyPropertyChangedインタフェースの不思議

以前の日記に何度か、このインタフェースに言及したことがある。INotifyPropertyChangedは、NET 2.0 WindowsFormsにおけるカスタムオブジェクトとコントロールの双方向データ連結に使用するインタフェースである。

例として、ユーザ定義のクラスとコントロールを次のように単純に連結していたとしよう。

form1.bindingSource = new BindingSource();
form1.bindingSource.DataSource = typeOf(Hoge);
form1.textBox1.DataBindings.Add("Text", form1.bindingSource, "Name");

この時、Hogeクラスで、以下のようにINotifyPropertyChangedインタフェースを実装しておくと

public class Hoge : INotifyPropertyChanged
{
    private string name;
    public event PropertyChangedEventHandler PropertyChanged;
    public virtual void NotifyPropertyChanged(String propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    public string Name
    {
        get { return this.name; }
        set 
        { 
            if ( this.name != value )
            {
                this.name = value; 
                NotifyPropertyChanged("Name");
            }
        }
    }
}

このクラスのインスタンスでNameプロパティを変更した際に、データ連結先のコントロール(サンプルではform1.textBox1)のTextプロパティが自動的に更新される(双方向データ連結)される、というおいしい機能なのだが、組み方によってはPropertyChangedがnullでプロパティの変更が反映されないケースがある。インスタンスをBindingSourceにAddすると正常に動作するので、データ連結の初期化に失敗しているようだ。
そもそも、誰が(何のクラスが)カスタムオブジェクトのPropertyChangedEventHandler型のイベントを、何時Addしにくるかが全く解らないので、このままでは調べようが無いのだが..