2010-11-25 34 views
2

WPFでは、XAMLでイベントハンドラを定義することができます(ComboBoxのSelectionChangedなど)。しかし、私が問題になるのは、イベントが早すぎるということです。コントロールが作成されたばかりのときに配線されます。その結果、そのコードの下にある別のコントロールがイベントハンドラで参照されると、null例外が発生します。私は、イベントハンドラの中でヌルチェックをたくさんしてしまいました。私は、すべてのコントロールが作成された後にすべてのイベントをフックアップしたいと思います(たとえば、OnInitialized)。それを行う方法はありますか?それとも私はここで何かを逃したのですかWPF:XAMLで定義されたイベントの発生を遅延させる方法

+1

コードを投稿できますか? SelectedItemを何かにバインドしますか? – Vitalik

答えて

2

コンシューマのInitializeComponent()コールの後で、自分自身でコードビハインドでこれらのイベントハンドラを定義するのが最善の解決策だと思います。もちろんこれはXAMLではありませんが、ハンドラが参照できるすべてのコントロールが既に作成されていることを確認する唯一の方法です。

+0

チップをありがとう。私はこのように定義されたイベントハンドラのほとんどを持っています。しかし、どういうわけか、WinFormデザイナのように、XAMLでハンドラを宣言するのがちょっときれいだと感じています。私は一貫性を持たせたいので、プロジェクト全体に対してどちらか一方を選択する必要があります。 – newman

0

イベントハンドラの先頭にメインコントロールのIsLoadedプロパティをチェックし、falseの場合はそれを返します。それが真実であれば、すべてが創造され、相互作用の準備ができていると確信するでしょう。

+0

IsLoadedプロパティのヒントをありがとう。 – newman

+0

この方法の問題点は、起動時にこれらのイベントを正しくセットアップすることができず、イベントハンドルを明示的に呼び出す必要があることです。 – newman

関連する問題