2016-04-01 52 views
0

當輸入字符串無效時,TextBoxes中的標準行爲是顯示紅色正方形(例如用戶在數字TextBox中引入字母)。這發生在TextBox失去焦點時。在驗證錯誤時取消TextBox輸入

我想實現這一行爲:

  • 文本框失去焦點。
  • TextBox做內部驗證(日期,數字等)。
  • 如果輸入的用戶字符串無效,則舊值將被恢復,並且TextBox不會顯示任何錯誤。

回答

0

你有驗證的個例在文本框在這裏點擊此鏈接:http://www.codeproject.com/Tips/690130/Simple-Validation-in-WPF

<ControlTemplate x:Key="validationErrorTemplate"> 
    <DockPanel> 
     <TextBlock Foreground="Red" 
      DockPanel.Dock="Top">!</TextBlock> 
     <AdornedElementPlaceholder 
      x:Name="ErrorAdorner" 
     ></AdornedElementPlaceholder> 
    </DockPanel> 
</ControlTemplate> 




public class NameValidator : ValidationRule 
    { 
     public override ValidationResult Validate 
      (object value, System.Globalization.CultureInfo cultureInfo) 
     { 
      if (value == null) 
       return new ValidationResult(false, "value cannot be empty."); 
      else 
      { 
       if (value.ToString().Length > 3) 
        return new ValidationResult 
        (false, "Name cannot be more than 3 characters long."); 
      } 
      return ValidationResult.ValidResult; 
     } 
    } 


<TextBox Height="23" HorizontalAlignment="Left" 
       Grid.Column="1" Grid.Row="0" Name="textBox1" 
       VerticalAlignment="Top" Width="120" 
       Validation.ErrorTemplate="{StaticResource validationErrorTemplate}" 
     > 
    <TextBox.Text> 
     <Binding Path="Name" Mode="TwoWay" 
     UpdateSourceTrigger="LostFocus"> 
      <Binding.ValidationRules> 
       <local:NameValidator></local:NameValidator> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 
0

恢復到原來的值是很容易的,如果你使用MVVM。在您的ViewModel的道具設置器中,如果它無效並且調用PropertyChanged,您可以簡單地將新值設置爲模型。這將告訴綁定的視圖元素調用你的屬性getter,它將返回舊值,並因此將視圖元素的內容還原爲舊值。

實施例(驗證該用戶輸入是int值):

public string Number 
{ 
    get { return _model.Number.ToString(); } 
    set 
    { 
     if (_model.Number.ToString() != value) 
     { 
      int number; 
      if (int.TryParse(value, out number)) 
      { 
       _model.Number = number; 
      } 

      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Number)); 
     } 
    } 
} 
+0

即用於視圖模型驗證工作正常。這裏的問題是當用戶引入一個無效的日期字符串,並且ViewModel中的屬性是DateTime。 TextBox自己進行內部驗證並顯示錯誤; textbox不會對viewmodel進行綁定,因爲它不能將字符串轉換爲DateTime,並且錯誤的日期字符串仍然存在。 – Poeta

相關問題