2011-12-23 10 views
1

フォームには、保存、承認、拒否という3つのボタンがあります。異なるアクションのバリデーションルールが異なります

ここでは、どのボタンがクリックされたかに基づいて、ユーザーの入力を異なる方法で検証する必要があります。 たとえば、ほとんどのフィールドが空でも、承認するためにはいくつかのフィールドが必要な場合でも、オブジェクトを保存できるはずです。

1つの方法は、CanSaveおよびCanApproveメソッドに検証を渡すことです(ボタンはViewModelのICommandにバインドされます)。ここで問題となるのは、ボタンが無効になるが、特定のボタンを有効にするためにはどのフィールドを入力する必要があるのか​​が示されていない。

理想的には、すべてのボタンを常に有効にして、ボタンをクリックしたときに検証を実行するのが理想的です。しかし、フィールドをVMから無効とマークするにはどうすればよいですか?

+0

これまでに書いたり試したコードはありますか? – MethodMan

答えて

1

クラスにLastStateValidatedプロパティのようなものを追加して、IDataErrorInfoバリデーションがその値になるようにしてください。

これは、初めてフォームを読み込むと、表示される検証は、オブジェクトの状態に関係なく有効であることを意味します。

コマンドを実行しようとすると、状態が変更され、IDataErrorInfoのバリデーションが異なるため、ユーザーが実行しようとした最後のアクションに基づいて異なる検証エラーが表示されます。

+0

シンプルで洗練されたソリューションをありがとう –

関連する問題