0

要素が読み込まれたときにユーザーがアクションを 1 回だけ実行できるようにする拡張メソッドを WPF FrameworkElement に実装しようとしています。

ここでの考え方は、要素が後でアンロードされ、再度ロードされた場合、アクションが 2 回呼び出されないということです。

しかし、匿名イベントハンドラーが呼び出されたときに自分自身を登録解除するための適切な構文がわかりません...

public static void ExecuteOnceWhenLoaded(
        this FrameworkElement element,
        Action action)
{
    if(element.IsLoaded)
    {
        action();
    }
    else
    {
        RoutedEventHandler handler;
        handler = (s, e) =>
        {
            element.Loaded -= handler; // ERROR: handler is not initialized
            action();
        }
        element.Loaded += handler;
    }
}
4

3 に答える 3

4

多分:

RoutedEventHandler ハンドラ = null;

于 2013-03-05T14:39:22.563 に答える
3

ただする

    RoutedEventHandler handler = null; // Initialize handler with null
    handler = (s, e) =>
    {
        element.Loaded -= handler;
        action();
    }
    element.Loaded += handler;
于 2013-03-05T14:45:33.490 に答える
0

まだ作成されていないハンドラーのサブスクライブを解除しようとしているため、これはコンパイル時エラーになるはずです。このシナリオでは、ハンドラー メソッドを作成し、メソッドの最初の実行時にハンドラーのサブスクライブを解除する方がよいでしょうか? また、クロージャーではないのに匿名メソッドを実行する必要がある正当な理由はありません。

于 2013-03-05T15:24:19.727 に答える