ビューモデルにエラー検証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
この場合はDelegateCommand
fromであるmy を作成すると、Prism
それを false に初期化して無効にすることができます。