验证绑定的空引用错误

时间:2012-03-18 22:58:57

标签: c# wpf validation binding

我尝试了以下代码,但它为第二行提供了空引用错误。我删除了第二行,但现在它给了第三行相同的错误。有什么想法吗?

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

1 个答案:

答案 0 :(得分: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; }

    }
}