初期化時にChangedイベントを無視したい

選択状態変更を捉えるため、Changedイベント(SelectionChangedとか)に処理を記述することがあるかと思うのですが、画面の初期化時にも不意に呼ばれるので読み込み前に動作されて困ることがありました。

それを防ぐために、InitializedFlgを作って、画面の初期化処理終了後にフラグを立てるとかゴチャゴチャと処理を書いていたのですが、もっと簡単に確認する方法がありましたので残しておきます。


IsLoadedプロパティ(DataGridの場合)

private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var grid = sender as DataGrid;
    if (grid?.IsLoaded ?? false)
    {
        // 行いたい処理
        // 長くなるなら否定の条件を書いてreturn(ガード節)にする方が良いですね
    }
}

senderを呼び出し元のコントロールに変換し、IsLoadedプロパティを確認することで
ロードが完了しているかを調べることができます。
コントロール毎に判断するのでロード完了のタイミングが違う場合でも安心です。

カテゴリー: C#タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA