2012-03-18 109 views
0

我試過下面的代碼,但它給了第二行的空引用錯誤。我刪除了第二行,但現在它給第三行同樣的錯誤。任何想法?驗證綁定的空引用錯誤

Binding binding = BindingOperations.GetBinding(txt_density, TextBox.TextProperty); 
binding.ValidationRules.Clear(); 
binding.ValidationRules.Add(new MainWindow.Float_Positive_ValidationRule()); 
+2

也許BindingOperations.GetBinding沒有找到你正在尋找的綁定,所以它返回null? – 2012-03-18 23:02:53

回答

2

您還沒有包含相關的XAML,因此很難明確說明問題所在。

如果您在行binding.ValidationRules.Clear();上設置了一個斷點,您很可能會發現您的綁定爲空,可能是因爲Text屬性上沒有綁定集。

如果在屬性上有一個有效的綁定集合,那麼ValidationRules集合應該被初始化,但是應該是空的(即非空),所以這不應該是你的問題,這就使得綁定本身成爲問題。

如果你使用這個簡單的例子,你會明白我的意思,只是從XAML中刪除Text綁定導致錯誤。

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <TextBox x:Name="txt_density" Text="{Binding SomeText}" /> 
    </Grid> 
</Window> 


namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      SomeText = "blah"; 
      this.DataContext = this; 
      this.Loaded += new RoutedEventHandler(MainWindow_Loaded); 
     } 

     void MainWindow_Loaded(object sender, RoutedEventArgs e) 
     { 
      Binding binding = BindingOperations.GetBinding(txt_density, TextBox.TextProperty); 
      binding.ValidationRules.Clear(); 
      //binding.ValidationRules.Add(new MainWindow.Float_Positive_ValidationRule()); 
     } 

     public string SomeText { get; set; } 

    } 
}