我从.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的调试时处理这些异常?
答案 0 :(得分:2)
您应该使用IDataErrorInfo
和ValidatesOnDataErrors
代替。您不仅不会遇到这种情况,而且还可以避免在堆栈中冒出异常的有形性能损失。