2011-07-25 23 views
4

複数のテキストボックスとコンボボックスを持つUIElementグリッドを持つWPFユーザーコントロールがあります。フォームがロード完了したときに、IsEnabled状態がfalseでなければならないButton(btnApply)があります。ただし、TextChangedイベントは、グリッドが読み込まれるときに発生し、IsEnabledをtrueに変更します。ユーザーコントロールの読み込みが完了した後にbtnApply.IsEnabled = falseを保持するブールメソッドを追加しました。しかし、ユーザーコントロールが完全に読み込みを完了してbtnApply.IsEnabledを変更できるようにするために、自分のメソッドのブール値の状態を変更することはできません。私は、ユーザーコントロール上のLoadedイベントを試して、IsLoadedイベントをチェックしようとしましたが、ユーザーコントロール上のすべての要素の読み込みが完了する前にすべてが起動されます。WPFユーザーコントロールの読み込みが完了したかどうかを判断する方法

編集:ユーザーコントロールのUIElementグリッドは、ItemsSource = Listを介して入力されます。テキストボックスとコンボボックスの変更は、TextChangedイベントとSelectionChangedイベントによってトラップされます。

+0

TextChangedイベントをトリガしているのは何ですか? –

答えて

4

ディスパッチャを使用して、後でDispatcherPriorityでIsEnabledの変更を、Loaded(入力など)で発生させてください。

Dispatcher.BeginInvoke(DispatcherPriority.Input, 
    new Action(delegate() { btnApply.IsEnabled = false; })); 

あなたは、トリックを行いません。ユーザーコントロールのたDispatcherPriorityの

+0

レイチェル、私はこの考えが好きです。私はそれが意味することは、ユーザーコントロールの読み込みが終了した後、つまり列挙値5(入力)の後にのみIsEnabledプロパティが起動されるように変更できるということです。のみ、それは動作しません。ここで私の代理人です - 公衆代理人のvoid MyApplyDelegate();これを私のInitializeComponent()の直後に追加しました。 btnApply.Dispatcher.BeginInvoke(DispatcherPriority.Input、新しいアクション(delegate(){btnApply.IsEnabled = false;})); – GAR8

+0

@ GAR8あなたのコントロールのロード処理中に何が起こるのですか? Loadedイベントがまだ完了していないことが問題ですか?おそらく、あなたはもっとコードを投稿することができます。 – Rachel

+0

私はそれを次のように変更しましたbtnApply.Dispatcher.BeginInvoke(DispatcherPriority.Input、new MyApplyDelegate(delegate(){btnApply.IsEnabled = false;})); – GAR8

0

hereは、たぶん私は問題を誤解ため、しかしInitialized/Loadedの登録を見ることができますか?そうでない場合は、どのようにGridにデータを取り込みますか?

+0

グリッドが完全に投入される前に、トリガを修正してください。グリッドとして読み込まれているTextChangedイベントがあります。しかし、私はTextChangedイベントを停止するBooleanメソッドを配置しました。これで、ユーザーコントロールとグリッドのロードが完全に終了してメソッドをオフにする(TRUE)ので、TextChangedイベントが正常に起動することがわかるようになりました。私の方法はソリューションの一部である必要はありません。これは、btnApply.IsEnableのデフォルト状態をfalseに維持する方法としてのみ設定されています。 – GAR8

関連する問題