MVVMパターンに続くこの特定のWPFアプリケーションでは、ビューモデルはIDataErrorInfoインターフェイスを実装して、テキストフィールドの無効なデータを表示します。検証エラーがユーザーに表示される前に遅延を作成する
ボリュームを入力できるテキストボックスがビューにあります。これは、プロパティで指定されたアップデート元を変更し、データエラーを検証:
<TextBox
Text="{Binding Volume, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
これに伴う問題は、ユーザーが入力を完了する前に、検証エラーを取得していることです。たとえば、有効な値は「25 ml」です。しかし、ユーザーが最後の "l"をタイプする前に、 "25 m"がテキストボックスに表示されます。これは有効な値ではないため、IDataErrorの実装ではこのようになります。
結果として、入力中に赤いマーカーがテキストボックスの周りで点滅します。
テキストボックスの周囲に赤色のマーカーが表示されるまでに少し時間がかかります(0.5秒)ので、検証エラーを表示する前にユーザーが入力を完了したと仮定できます。
最初に、ビューモデルでプロパティを更新する前に0.5秒待つ特殊なテキストボックスを作成しました。ユーザーが有効な値を入力した場合は、送信ボタンが有効になる前に0.5秒が経過しているため、これは問題ありません。
私は、この動作を実装する特殊なバインディング(つまり、System.Windows.Data.Bindingから派生した特殊なクラスを作成する)を書くことができると考えていますが、これを行う方法はわかりません。
それはもっともらしい方法ですか、それとも良いですか?
をなぜあなたはUpdateSourceTrigger = PropertyChanged' '必要なのでしょうか? –
そうでない場合、フィールドがフォーカスを失うまでビューモデルのプロパティは更新されません。また、送信ボタンコマンドには、すべてのフィールドが入力されたことを確認するCanExecute()実装があるため、フィールドがフォーカスを失うまでボタンをクリックすることはできません。 – Pete