11

INotifyPropertyChanged はかなり自明であり、いつそれを上げるべきか (つまり、値の更新が完了したとき) は明確だと思います。
INotifyPropertyChanging を実装すると、オブジェクトの状態を変更するセッターまたはその他のメソッドに入るとすぐにイベントが発生し、発生する可能性のあるガードと検証を続行する傾向があります。

そのため、プロパティが変更される可能性があるが、まだ変更されておらず、実際には変更が正常に完了していない可能性があるという通知としてイベントを扱っています。

オブジェクトのコンシューマーがこのプロパティを使用している場合 (変更追跡のためにイベントを使用する LINQ to SQL のように)、与えられた値が適切であり、オブジェクトの状態は変更に対して有効ですか?

このイベントのコントラクトは何ですか? サブスクライバーにはどのような副作用がありますか?

4

3 に答える 3

13

プロパティに対して無効な値がオブジェクトに与えられ、例外をスローする場合は、PropertyChangingイベントを発生させないでください。値が変更されると判断した場合にのみ、イベントを発生させる必要があります。一般的な使用シナリオは、単純なフィールドを変更する場合です。

public T Foo
 { get
    { return m_Foo;
    }
   set
    { if (m_Foo == value) return; //no need for change (or notification)
      OnPropertyChanging("Foo");
      m_Foo = value;
      OnPropertyChanged("Foo");
    }
 }
于 2008-10-04T06:07:37.570 に答える
1

余談ですが、 PostSharpには INotifyPropertyChanged を自動実装する興味深い機能があります

于 2008-10-04T08:56:08.900 に答える
0

INotifyPropertyChangedの実装を完全に回避したい場合は、代わりにUpdateControls.NETの使用を検討してください。これにより、ほとんどすべての簿記コードが削除されます。

于 2008-12-30T13:02:10.250 に答える