我尝试了以下代码,但它为第二行提供了空引用错误。我删除了第二行,但现在它给了第三行相同的错误。有什么想法吗?
Binding binding = BindingOperations.GetBinding(txt_density, TextBox.TextProperty);
binding.ValidationRules.Clear();
binding.ValidationRules.Add(new MainWindow.Float_Positive_ValidationRule());
答案 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; }
}
}