ビューモデルにエラー検証UserNameがあり、少なくとも 2 文字の長さでない場合、検証エラーが発生します。
アプリケーションの起動時に、このフィールドは検証されず、エラーはないと見なされます。セッターが呼び出されたときだけ、入力が有効かどうかをチェックします。私のフォームでは、ロード時に の周りに赤いボックスがないという結果になりましたTextBox。ただし、ユーザーが文字を入力するとすぐにUserNameセッターが呼び出され、長さが 2 文字未満であるため、検証エラーが発生します。
これはデフォルトでどのように機能するかであり、これが私が望むものです。フォームを開いたまま開始したくありませんTextBox。
さて、このフォームには、ICommand に関連付けられたボタンがあります。フォーラムが読み込まれると、UserName技術的にフィールドにエラーがないと見なされるため、ボタンが有効になります。ただし、ユーザーが 1 文字を入力すると、無効になり、すべてを削除すると無効のままになります。
エラーなしでフォームをロードしたいが、ボタンを無効にしたい。
現在、私のCanExecute()メソッドは、ViewModel にあるフィールドをチェックしています。これは基本的に、errorsリスト カウントが 0 より大きいかどうかをチェックします。0 より大きい場合は、エラーがあるため true を返します。そうでない場合は false を返します。
上記のジレンマを解決する方法はありますが、好きではありません。私はそのように小切手を持っています。
return UserName.Length < 2 || errors.Count > 0
これで問題ないように思えますが、 や など、チェックするフィールドがもっとたくさんある場合は、AddressこれらPortも追加する必要があります。これが実際に行うのは、この初期 false を に提供することだけでありCanExeute()、それ以外の場合は冗長になるため役に立ちません。UserName.Length < 2もちろん、配列errors.にはいくつかのエラーがあります。
ICommandこの場合はDelegateCommandfromであるmy を作成すると、Prismそれを false に初期化して無効にすることができます。