2016-08-24 11 views
0

はここIdCardWPF/MVVM検証

<TextBox.Text> 
    <Binding Mode="TwoWay" 
       Path="IdCardNumber" 
       UpdateSourceTrigger="PropertyChanged"> 
       <Binding.ValidationRules> 
        <v:AlphaNumValidationRule ValidationStep="UpdatedValue" /> 
       </Binding.ValidationRules> 
    </Binding> 
    </TextBox.Text> 

検証のための入力として使用するテキストボックスを表すXAMLコードですIdCard入力が更新されるたびにIsValidを更新する必要があります。私は別のValidatioを試しましたnステップしますが、何もしません。

最初にIsValidの入力を最初に読み込むときに正しい値を入力すると、入力を削除して間違ったサポートされていない値を追加するとTrueになり、最後の正しい値が保持されるためIsValidは同じままになります。

これを解決する方法はありますか?

+0

ここで私の投稿の検証方法を説明します:http://stackoverflow.com/questions/19539492/wpf-textbox-validation-c-sharp/37255232#37255232 –

+0

@ Mr.BIは、この検証のための私の投稿 –

答えて

1

あなたはLostFocusUpdateSourceTriggerプロパティを変更しようとすることができます:

<Binding Mode="TwoWay" 
      Path="IdCardNumber" 
      UpdateSourceTrigger="LostFocus"> 
      <Binding.ValidationRules> 
       <v:AlphaNumValidationRule ValidationStep="UpdatedValue" /> 
      </Binding.ValidationRules> 
</Binding> 

編集:

<TextBox Name="TextBox"> 
      <TextBox.Text> 
       <Binding Mode="TwoWay" 
       Path="Text" 
       UpdateSourceTrigger="PropertyChanged"> 
        <Binding.ValidationRules> 
         <local:AlphaNumValidationRule/> 
        </Binding.ValidationRules> 
       </Binding> 
      </TextBox.Text> 
     </TextBox> 
    <TextBlock Text="{Binding (Validation.HasError), ElementName=TextBox}"/> 
+0

私はLostFocusを使用したくありません。私はリアルタイムでIsValidを更新したいと思います。使用しているValidationStepは誤った値を格納します(IsValidゲッターのために、入力が空であるかどうかだけを検証します)。また間違った入力の警告メッセージがトリガされます。 –

+0

ご迷惑をおかけして申し訳ございません。なぜこの "IsValid"ブール値が必要なのですか?検証の結果をバインドしたい場合、 '{Binding(Validation.HasError)、ElementName = TextBox}' –

+0

と、もう一方の側(ViewModel)からValidation.HasErrorを使用する方法は? –

3

が添付あり:

あなたがHasErrorプロパティを使用することができ、検証結果をバインドするにはバインディングエラーが発生したときに発生するイベントValidation.Error

基本的にこのイベントにアタッチして、Validation.HasErrorsプロパティの値をviewmodelのIsValidプロパティに設定することができます。

ただし、競合が発生します。 Viewで検証ロジックを定義しましたが、ViewModelで検証ロジックにアクセスしたいのですが、そのために問題が発生しています。

INotifyDataErrorInfoを実装することで、検証ロジック全体をビューモデルに移行することをおすすめします。すべての検証ルールと検証エラーがビューモデルで自由に使用できます。

+0

私はそれを試みるので、これの明確な例はありますか? –