2012-02-29 6 views
0

ボタンをICommandから派生したクラスに関連付ける場合でも、 CanExecuteメソッドを呼び出し、その有効状態をリフレッシュします。私はCanExecuteChangedイベントについて知っていますが、関連するコマンドが登録されているボタンが登録されていますが、なぜこれが面倒なのかについては次の段落を参照してください。有効なコントロールエントリのダイアログでOKボタンの有効状態を設定する良い方法は

いくつかの10-15個のコントロールからなるプレーンなダイアログでは、ボタンのコマンドでCanExecuteChangedイベントを発生させ、ボタンの有効状態をCanExecuteメソッドの戻り値の影響を受けます。最後の文章で何をする必要があるのか​​は、かなり面倒でした。

すべてのコントロールが有効な情報を持ち、その時点で有効になるまで、確認ボタン(例:OK)がグレー表示されるように、WPFダイアログをより良い方法でコーディングする必要があります。適切に記入してください)。サンプルコード、アイデア、記事へのポインタは非常に高く評価されます。

ありがとうございました

答えて

1

ここでは何も見当たりません。 「すべてコントロールは有効な情報を持っています」というのは、コントロールが編集された後に発生する可能性があるため、すべてのコントロールからの通知を変更する必要があります。いくつかの10-15のコントロールからなる、昔ながらのダイアログで

+0

しかし、手動で(つまりXAML内で)各コントロールに「変更された」ハンドラを追加することによって、これを行うことは、少なくともエラーが発生しやすいようです。特に、変更を示すハンドラとそれらを設定するプロパティは制御ごとに異なるため、私はいくつかのN個のイベントハンドラに悩まされています。どのくらいの数の異なるコントロールタイプを使用しているのですか?共通のハンドラを呼び出して、最終的にCanExecuteChangedイベントを発生させます。 WPF自体でこれを行うためのより自動化された方法が必要です。確かに、この検証要件は、WPFに組み込まれたいくつかの機能を適用するには十分なものです。 –

+0

@Michael:XAMLでハンドラを配線したくない場合は、コードからハンドラを実行します。すべてのコントロールを非常に簡単にループすることができます。 –

+0

どちらの方法でも、ハンドラの数は同じであり、ハンドラは制御タイプごとに必要です。 XAMLでは実際には簡単だと思いますが、コントロールが有効な入力や何かを持っているかどうかを確認できるバリデータのように、各コントロールに何かが組み込まれているよりも、エラーが発生しやすく面倒です。これは、有効なものと不可能なものを判別するのに役立つように、それぞれのコントロールタイプに対してバリデータを一度コーディングする必要があるとしても、望ましいと思われます。私は一度それをやって、そのタイプのすべてのコントロールに影響を与えるスタイルや何かとしてそれを固執することができます。 –

0

、私が考えていないこれらのコントロールのすべての 単一のもの、

ごとに変更通知を処理する必要が 行き当たりばったりのようですそう。すべてのTextbox、checkbox changedイベントは、同じハンドラ、たとえばSetState()によって処理され、ダイアログの全体的な状態が計算されます。コントロールが編集されるたびに、状態全体が再計算されます。

すべてのコントロールが有効な情報

を持つまで、そのオブジェクトは、boolean型プロパティEnableOKButtonを持っているでしょう、のは、更新された状態に応じて設定される、としましょう。そのプロパティは、ボタンのEnabledプロパティにバインドされているため、無関係のイベントを処理することなく自動的に変更されます。

+0

変更されたすべてのイベントに対して同じハンドラを使用することはできません。さまざまなコントロールが異なるプロトタイプのハンドラ関数を必要とする変更されたイベントに対して異なるデリゲート型を使用するためです。最良のケースでは、コントロールタイプごとに1つのハンドラを持たせることができます。そして、これらのハンドラのそれぞれは、それぞれのコントロールの内容を検証する中央ハンドラを呼び出させ、関連するコマンドのCanExecuteChangedイベントをトリガします(CanExecuteが実際に偽から真に、またはその逆に移行したかどうかにかかわらず)終了したらOKボタンを押します。 –

+0

そして、ボタンの有効状態をトリガーするEnabledプロパティであっても、そのプロパティに対する依存性を再評価するために何らかの方法でボタンを指示する必要があります。したがって、ほとんどの場合、従属プロパティが必要であり、普通の普通のC#プロパティではありません。最終的には、これは、ボタンに関連付けられたコマンドオブジェクトと、ボタンが自動的に登録される対応するCanExecuteChangedイベントを持つよりも複雑です。 –

+0

ポイントは、多くのイベント/ハンドラが状態変化のビットを行い、状態ビットが相互に関連しており、ユーザがどのような順序を知っているのかをトリガするということです。一貫性のある/有効な状態を保証する唯一の方法はすべてのケースで状態全体を再計算します。 私はここで推測していますが、このようなきめの細かいレベルでコマンドパターンを実装することは、エンジニアリングの方法ではないかと思います。多分複雑な問題を単純化するために、事前にお詫びします。 – radarbob

関連する問題