フィールドが少ない登録フォームがあります。それはPRISM MVVM
アプリケーションです。
フィールドの1つのXAMLは次のようになります(RegisterView.xaml):
<TextBlock>Surname</TextBlock>
<TextBox Validation.ErrorTemplate="{StaticResource validationTemplate}" HorizontalAlignment="Left" Margin="0" Name="Surname" VerticalAlignment="Top" >
<TextBox.Text>
<Binding Path="Surname" UpdateSourceTrigger="LostFocus" >
<Binding.ValidationRules>
<val:Required />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
上記のコードからわかるように、フィールドを検証するためにクラスRequiredを使用します。次に、Requiredクラスの関数Validate()がValidationResult
オブジェクトを返します。また、入力のスタイルにいくつかのトリガーを定義したので、検証結果をビュー内のユーザーに表示できます。
私が知らないのは、ViewModelのすべての入力の検証状態を検出する方法です。ViewModelには、SaveUserCanExecute
すべての入力の検証状態の基本にある登録フォーム送信ボタンを有効/無効にする機能があります。
それで、これを達成する簡単な方法はありますか?
これを回避することはできますが、適切な方法ではないと思います。
ここで、送信ボタンのClickイベントで起動されるビューコードでSubmit_Click関数を作成しました。
RegisterView.xaml内
<Button Content="Register" HorizontalAlignment="Left" Margin="0" Name="Submit" VerticalAlignment="Top" Command="{x:Static inf:Commands.SaveUser}" Click="Submit_Click" />
また、コードビハインドで新しいパブリックブール変数「formIsValid」を作成しました。送信ボタンを押すと、すべての入力に検証エラーがないかどうかを確認します(Validation.GetHasError(InputName)
関数付き)。そうである場合は、formIsValid
変数をtrueに設定し、そうでない場合はfalseに設定します。
RegisterView.xaml.cs内
private void Submit_Click(object sender, RoutedEventArgs e)
{
if (Validation.GetHasError(Firstname) == false && Validation.GetHasError(Surname) == false)
{
registerFormValid = true;
}
else
{
registerFormValid = false;
}
}
次に、ViewModelSaveUserCanExecute
関数は次のようになります。
private bool SaveUserCanExecute(string parameter)
{
if (View.registerFormValid == true)
{
return true;
}
return false;
}
しかし、前に述べたように、それは適切な方法ではないと思います。私はもっと明確な方法を探しています。