2016-04-19 4 views
1

Я новичок в wpf, и я пытаюсь сделать текстовое поле проверки некоторого окна showdialog. я уже делаю валидацию для пустых полей и пробелов, но мне нужно добавить подтверждение для чисел, которые больше, чем какое-то максимальное значение, которое я передал в диалог, но не знаю, как использовать его для класса ValidationRule.как передать динамическое значение для ValidationRule Class

это мой ValidationRule Класс:

public class CustomValidationRule : ValidationRule 
{ 
    public int kMax 
    { 
     get { return kMax; } 
     set { kMax = value; } 
    } 

    public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
    { 
     if (string.IsNullOrEmpty(value.ToString())) 
      return new ValidationResult(false, "No number was entered!"); 
     if (value.ToString().Contains(' ')) 
      return new ValidationResult(false, string.Format("No spaces allowed!"); 
     try 
     { 
      int num = Convert.ToInt32(value); 
      if (num == 0 || num > kMax) 
       return new ValidationResult(false, string.Format("Number must be in range of (0,{0})", kMax)); 
     } 
     catch (FormatException fe) 
     { 
      return new ValidationResult(false, fe.Message); 
     } 

     return ValidationResult.ValidResult; 
    } 
} 

и это мой код окна:

public partial class kInputWindow : Window 
{ 
    public string ResultText { get; set; } 
    public int kMax { get; set; } 

    public kInputWindow(string question,int kMax) 
    { 
     InitializeComponent(); 
     lblQuestion.Content = question; 
     this.DataContext = this; 
     this.kMax = kMax; 
    } 

    private void btnDialogOk_Click(object sender, RoutedEventArgs e) 
    { 
     this.DialogResult = true; 
    } 

    public string Answer 
    { 
     get { return txtAnswer.Text; } 
    } 

    private void NumberValidationTextBox(object sender, TextCompositionEventArgs e) 
    { 
     Regex regex = new Regex("[^0-9]+"); 
     e.Handled = regex.IsMatch(e.Text); 
    } 
} 

, когда я создать диалог в главном окне я делаю это так:

kInputWindow kInput = new kInputWindow(question, lines); 
kInput.ShowDialog(); 

и теперь kinput получил значение, которое мне нужно, но я не знаю, как передать его для моего ValidationRule Class

ответ

0

В WPF валидация обычно устанавливается в xaml. Когда вы создаете привязку для своего текстового поля, вы также можете указать его правила проверки, например.

  <Binding.ValidationRules> 
      <CustomValidationRule/> 
     </Binding.ValidationRules> 

Вы можете добавить несколько правил проверки, если хотите. Когда значение, которое связано с изменением, оно переходит к объекту правила проверки и автоматически проверяется, поэтому нет необходимости вручную передавать значение. Вам нужно будет создать экземпляр вашего правила проверки в вашем xaml. This article дает хорошее представление