与ValidatiOn Exception绑定会在.Net4中抛出Unhandled-Error

时间:2010-09-27 16:01:41

标签: c# wpf validation c#-4.0

我从.NET3.5到.NET4.0遇到了一个非常烦人的变化。 当在绑定上使用ExceptionValidationRule来验证绑定属性中引发的异常时,setter将由3.5中的绑定处理。在4.0中,它在调试时被抛出为未处理。

在这个小例子(新的WPF应用程序项目)中,从3.5-> 4.0更改目标框架显示了问题:

MainWindow.xaml.cs:

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;
        }

        private string _field = "Test";
        public string Property
        {
            get { return _field; }
            set
            {
                if (value.Length < 4)
                    _field = value;
                else
                    throw new ArgumentException();
            }
        }
    }

MainWindow.xaml

<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">
    <TextBox Width="300"
             Height="100"
             VerticalAlignment="Center"
             HorizontalAlignment="Center"
             Text="{Binding Property, ValidatesOnExceptions=True, UpdateSourceTrigger=PropertyChanged}" />
</Window>

是否可以在.NET4.0的调试时处理这些异常?

1 个答案:

答案 0 :(得分:2)

您应该使用IDataErrorInfoValidatesOnDataErrors代替。您不仅不会遇到这种情况,而且还可以避免在堆栈中冒出异常的有形性能损失。