2010-11-16 63 views
1

沒有響應我,有一個有效性規則應用到它的文本框:WPF文本框綁定時有效性規則被解僱

<TextBox Style="{StaticResource StandardTextBox}" 
       Grid.Column="1" Grid.Row="4" 
       IsReadOnly="{Binding SaveModeText}" 
       MaxLength="50"> 
      <TextBox.Text> 
       <Binding Path="Individual.SurName" 
         UpdateSourceTrigger="PropertyChanged" 
         ValidatesOnDataErrors="True" 
         ValidatesOnExceptions="True" 
         NotifyOnValidationError="True"> 
        <Binding.ValidationRules> 
         <valid:RequiredTextBoxValidationRule 
          ErrorMessage="Please enter a last name" /> 
        </Binding.ValidationRules> 
       </Binding> 
      </TextBox.Text> 
     </TextBox> 

頁面加載後的文本框中包含基於其結合正確的值。如果我從文本框中刪除該值,則ValidationRule將正確觸發,並按預期看到錯誤消息。我的應用程序包含一個「Discard Changes」按鈕,用於重載DataContext。希望它會重置所有的綁定,並且這個文本框會再次顯示原始值。出於某種原因,頁面上沒有與它們關聯的ValidationRule的所有其他值都會得到正確的重置,但是此文本框不會。

如果我從XAML中刪除了ValidationRule,該值將正確重置。如果我通過IDataErrorInfo處理驗證,驗證會正確觸發並且值正確重置。因爲我在整個應用程序中都使用了ValidationRules,所以我想知道是否有人遇到過這個問題並解決了它。此時,如果可能的話,我寧願堅持實施的ValidationRules,而不是將所有內容切換到IDataErrorInfo。

回答

0

由於您正在修改代碼中的值,您是否需要使用Mode = TwoWay來更新綁定?我沒有時間去挖掘,看看這是不是錯,但它可能是一個開始的地方。

+0

我相信默認情況下這個模式是TwoWay。我通過添加模式屬性來測試它,但它沒有任何區別。 – Filosopher 2010-11-16 19:51:05

+0

我相信會發生這種情況,因爲ValidationRule在更新源屬性之前觸發,並且失敗時源屬性永遠不會更新。反過來,當數據刷新時,INotifyPropertyChanged不會爲有問題的屬性觸發。我嘗試將ValidationStep更改爲UpdatedValue,但隨後發現ValidationRule在其他驗證後觸發,這是我不想要的。 – Filosopher 2010-11-29 22:47:17