2012-03-19 68 views
2

我在驗證時遇到了一些問題。我已經創建稱爲RequiredFieldRule自定義驗證其在XAML施加如下: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); 

我想說明一些自定義的視覺反饋,並試圖使用Validation.Error事件,因爲它冒泡捕捉錯誤:

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

    } 

不幸的是,使得h安德勒從未被調用過。我的問題是,爲什麼該處理程序不被調用,當其中的TextBox正確返回失敗的ValidationResult?

回答

8

您沒有在XAML中設置的所有設置。嘗試添加這些XAML屬性:

  • UpdateSourceTrigger = 「的PropertyChanged」
  • NotifyOnValidationError = 「真」
  • 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> 

我有下面的例子,所以我加載它並測試你在做什麼,我得到了同樣的問題。 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」' – 2012-03-19 05:54:23

+0

@Rhyous Aweesome時纔會發生驗證。我一上班就會嘗試。如果你沒有收到我的進一步評論,它的工作,我非常感謝! – onefootswill 2012-03-19 21:58:23