私はフィールドが少ない登録フォームを持っています。それはPRISM MVVM
アプリケーションです。あなたは、私がフィールドを検証するために必要なクラスを使用し、上記のコードから見ることができるようにView Modelで正常に検証されたフォームについて知る方法
<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>
:フィールドの1の
XAMLは、この(RegisterView.xaml)のように見えます。クラスRequiredのValidate()は、ValidationResult
オブジェクトを返します。また、入力のスタイルにいくつかのトリガーを定義しました。そのため、検証結果をユーザーに表示することができます。
ViewModelのすべての入力の検証状態を検出する方法はわかりません。 ViewModelでは、すべての入力の検証状態で基本的に登録フォーム送信ボタンを有効/無効にするSaveUserCanExecute
機能があります。
これを実現する方法は簡単ですか?
私はこれに対していくつかの回避策をとることができましたが、私は適切な方法ではないと思います。
送信ボタンのClickイベントで発生したViewコードで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" を作成しました。 Submitボタンを押すと、すべての入力に妥当性チェックエラーがないかどうかチェックされます(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;
}
}
で
は、その後のViewModelにSaveUserCanExecute
関数は次のようになります。
private bool SaveUserCanExecute(string parameter)
{
if (View.registerFormValid == true)
{
return true;
}
return false;
}
しかし、私は前に述べたように、私はit'sない適切な方法だと思うし、私はいくつかのより明確な方法を探しています。
良いですが、IDataErrorInfoを正しく実装して検証の結果を返す方法はありますか?私は多くのIDataErrorInfoの例をチェックしました。ほとんどの場合、いくつかの検証関数をpublic string [string propertyName] {validation functions here}に入れました。しかし、私はすでにバリデーション関数をを持つxaml要素にバインドしていますので、同じ関数を2回呼び出す必要はありません。ありがとう。 –
mantonn
そして、私がMessageBox.Show(this.Error)を呼び出すと、私のコードでは、何も表示されず、メッセージボックスも表示されません。 – mantonn
最後に、IDataErrorInfoを使用しました。ありがとう – mantonn