PropertyChanged
を実装するオブジェクトのイベントをサブスクライブする拡張メソッドがありますINotifyPropertyChanged
。
イベントが一度だけ発生することを望みます。それ以上ではありません。
これが私の方法です。
public static void OnPropertyChanged<T>(this INotifyPropertyChanged target, string propertyName, Action action)
{
if (target == null)
{
return;
}
PropertyChangedEventHandler handler = (obj, e) =>
{
if (propertyName == e.PropertyName)
{
action();
}
};
target.PropertyChanged -= handler;
target.PropertyChanged += handler;
}
しかし、うまくいきません。イベント ハンドラーを削除できないため、このメソッドを呼び出すたびにイベントが発生します。
私は別のアプローチを試みました。匿名メソッドを使用する代わりに、次のようなより伝統的な方法を使用します。
public static void OnPropertyChanged<T>(this INotifyPropertyChanged target, string propertyName, Action action)
{
if (target == null)
{
return;
}
target.PropertyChanged -= target_PropertyChanged;
target.PropertyChanged += target_PropertyChanged;
}
static void target_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
//do stuff here
}
そして、それはうまく機能します。イベントは 1 回だけ発生しますが、Action パラメーターも必要です。このアプローチでは使用できません。
この問題を解決するための回避策または別のアプローチはありますか?静的メソッド内の匿名メソッドに何か奇妙なことがありますか?
前もって感謝します。