2012-03-19 98 views
-1

下面的代碼不起作用。我做了沒有驗證的工作,我的意思是我在MyClassset裏設置了一個標準,它確實有效。但是,當我嘗試驗證規則時,它不起作用。自定義驗證規則不起作用

class MyClass 
{ 
    private string num; 

    public string MyString 
    { 
     get 
     {      
      return num; 
     } 
     set 
     { 
      num = value;    
     } 
    } 
} 

public class MyValidationRule : ValidationRule 
{ 
    public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
    { 
     float num = System.Convert.ToSingle(value); 

     // Is positive? 
     if (num < 0) 
     {      
      return new ValidationResult(false, "Must be positive"); 
     } 

     // Number is valid 
     return new ValidationResult(true, null); 
    } 
} 

public MainWindow() 
{ 
    InitializeComponent(); 

    mc = new MyClass(); 
    Binding b = new Binding(mc.MyString); 
    b.Mode = BindingMode.TwoWay; 
    b.ValidationRules.Add(new MyValidationRule()); 
    b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 

    MyTextBox.DataContext = mc; 
} 
+0

爲什麼不使用XAML? – 2012-03-19 12:23:09

+0

因爲該文本框在另一個窗口中。我無法用XAML來完成。 – Shibli 2012-03-19 12:40:24

+0

我不認爲你應該這樣做... – 2012-03-19 12:41:31

回答

3

你的約束力似乎打破了。這:

Binding b = new Binding(mc.MyString); 

...應該是:

Binding b = new Binding("MyString"); 

此外,我甚至不看任何調用SetBinding

How to debug bindings

+0

@ExitMusic:'mc.MyString'返回'MyString'屬性的字符串值,它可以是任何東西。如果此時MyString的值是「MyString」,它只會創建正確的綁定。 – 2012-03-19 12:26:33

+0

對不起,我看着代碼正確,然後意識到我是愚蠢的:/ – 2012-03-19 12:27:35

+0

好吧,我已經改變它爲'「MyString」'並添加了'SetBinding',它的工作。非常感謝你。 – Shibli 2012-03-19 12:38:16