WeakPropertyChangedListener.PropertyChangedCallback で System.NullReferenceException その2

さっきの続き

すこしわかったかも。
データをバインドする前に、PropertyChanged イベントに独自のハンドラを追加すると発生する。
データをバインドした後に、PropertyChanged イベントに独自のハンドラを追加しても発生しなかった。

public Page2(Page parent)
{
  InitializeComponent();

  this.parent = parent;
  var d = new Data();
  // バインド前に実行
  d.Initialize(); // 独自のイベントを追加する処理
  d.ResumeValidation();
  this.DataContext = d;
  // バインド後に実行
  // d.Initialize(); // 独自のイベントを追加する処理
}

データのバインドをする前に、独自のハンドラを追加した場合の PropertyChanged イベントの登録されてる デリゲートの中身。

んで、実際走った デリゲードの中身。

次が、データのバインドをした後に、独自のハンドラを追加した場合の PropertyChanged イベントの登録されてる デリゲートの中身。

んで、実際走った デリゲードの中身。


違いは、PropertyChanged イベントに登録されているデリゲードの順番と、実際に走ったデリゲードの中身。
バインドするより前に独自のハンドラを追加した場合、実際に走ったデリゲードの
_notifyPropertyChanged、_weakBindingExpression、Source が null になっている。
多分これのせいで、NullReferenceException が発生してるんだと思う。


ただ、何でこうなるのかは分からない。
http://silverlight.net/forums/t/58548.aspx の英語が読めたら少しはわかるのかも。