2015-05-04 59 views
0

我有一個WPF窗口中的三個文本框與UpdateSourceTrigger =「LostFocus」。 我也有一個驗證類(:ValidationRule)根據我的情況返回false或true,並保持它如此簡單:條件是檢查字符串是否爲空。驗證沒有被解僱,除非你輸入

<TextBox x:Name="TestBox"> 
    <TextBox.Text> 
     <Binding ElementName="This" Path="test" 
     UpdateSourceTrigger="LostFocus"> 
      <Binding.ValidationRules> 
       <local:IPv4ValidationRule /> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 
<TextBlock Margin="2" Foreground="Red" FontWeight="Bold" 
     Text="{Binding ElementName=TestBox, 
         Path=(Validation.Errors), 
         Converter={StaticResource eToMConverter}}" /> 

的問題是:如果 運行應用程序,你去通過textboxs,將在失去焦點顯示沒有錯誤。我放了一個按鈕在代碼中激發驗證,並且沒有顯示錯誤。

只有當您輸入文本框,然後清除它,驗證纔會生效。

我該如何解決這個問題?因爲在這種情況下,我無法確認是否有人將文本框留空,除非他鍵入然後刪除。

回答

0

閱讀MSDN,你可以發現:

驗證通常當目標的價值轉移到 綁定源屬性時發生。

因此,如果不輸入密鑰,您的驗證規則將不會被評估,除非您更新源代碼。 你可以在你後面執行代碼。假設MainWindow是你的窗口,你需要添加一個Loaded事件處理:

public MainWindow() 
{ 
    InitializeComponent(); 
    Loaded += new RoutedEventHandler(MainWindow_Loaded); 
} 

private void MainWindow_Loaded(object sender, RoutedEventArgs e) 
{ 
    BindingExpression bindingExpression = TestBox.GetBindingExpression(TextBox.TextProperty); 
    bindingExpression.UpdateSource(); 
} 

正如你可以看到,處理器的代碼更新源,因此ValidationRule進行評估。