2012-03-19 14 views
2

検証に問題があります。バリデータは、ユーザーが値を入力せずに離れているテキストボックスから移動するとき、次のように返すことValidation.Errorがハンドラを呼び出さない

<TextBox local:Masking.Mask="^[a-zA-Z0-9]*$" x:Name="CameraIdCodeTextBox" Grid.Row="1" Grid.Column="1"> 
<Binding Path="CameraIdCode" Mode="TwoWay"> 
    <Binding.ValidationRules> 
    <localValidation:RequiredFieldRule /> 
</Binding.ValidationRules> 
</Binding> 
</TextBox> 

return new ValidationResult(false, ValidationFailedMessage); 

私は次のようにXAMLで適用されるRequiredFieldRuleというカスタムバリデータを作成しました私はいくつかのカスタム視覚的なフィードバックを見せたいし、それがバブルアップとして、エラーをキャプチャするためにValidation.Errorイベントを使用しようとしました:

private void Grid_Error(object sender, ValidationErrorEventArgs e) 
    { 
     // do stuff here 

    } 

残念ながら、その時間andlerは呼び出されません。私の質問は、その中のTextBoxが正常に失敗したValidationResultを返すときに、そのハンドラが呼び出されないのはなぜですか?

答えて

8

XAMLで設定する必要があるものはすべてありません。これらのXAMLのプロパティを追加してみてください:

  • UpdateSourceTrigger = "にPropertyChangedを"
  • NotifyOnValidationError = "True" をこのよう

  • ValidatesOnExceptions = "真":

    <TextBox local:Masking.Mask="^[a-zA-Z0-9]*$" x:Name="CameraIdCodeTextBox" Grid.Row="1" Grid.Column="1"> 
    <Binding Path="CameraIdCode" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True" ValidatesOnExceptions="True"> 
        <Binding.ValidationRules> 
        <localValidation:RequiredFieldRule /> 
    </Binding.ValidationRules> 
    </Binding> 
    </TextBox> 
    

    I次の例がありますので、私はそれを読み込み、あなたがやっていることをテストしました。私は同じ問題を抱えています。

    http://www.wpfsharp.com/2012/02/03/how-to-disable-a-button-on-textbox-validationerrors-in-wpf/は私が私の例に言及してプロパティを追加し、私の提案が動作することを証明するために、私は私のグリッドにバブリングイベント、Validation.Error =「MainGrid_Error」を追加し、それが発生します。

    これらのプロパティを追加すると、私の例ではバブリングされたイベントが発生します。

  • +0

    ええ、彼に耳を傾けてください。エラーイベントは、 'NotifyOnValidationError =" True "'の場合にのみ発生し、 'ValidatesOnExceptions =" True "' –

    +0

    @Rhyous Aweesomeを設定した場合にのみ検証が行われます。私は仕事に着くとすぐにそれを試してみます。あなたが私からのさらなるコメントを得なければ、それは働きました、そして、私は非常に感謝しています! – onefootswill

    関連する問題