2016-04-19 21 views
1

私はwpfで新しく、いくつかのshowdialogウィンドウの検証テキストボックスを作成しようとしています。私はすでに空欄と空白の検証をしていますが、ダイアログに渡した最大値より大きい数値に対してバリデーションを追加する必要がありますが、ValidationRuleクラスにその値を使用する方法はわかりません。ValidationRuleクラスの動的値を渡す方法

これが私の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クラスに渡す方法を知らないです

答えて

0

通常、WPFの検証はxamlに設定されています。テキストボックス用のバインディングを作成するときに、そのバリデーションルールを指定することもできます。

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

必要に応じていくつかの検証ルールを追加できます。バインドされている値が変更されると、検証ルールオブジェクトに渡され、自動的に検証されるため、値を手動で渡す必要はありません。 xaml内に検証ルールのインスタンスを作成する必要があります。 This articleは良い紹介を提供します

関連する問題