我想使用ValidatesOnException在WPF中运行基本数据验证示例,但它根本无法正常工作,并且一旦我的viewmodel抛出ValidationException,我的程序便崩溃了,用户代码未处理ValidationException。

我的视图模型是

public class MainViewModel : INotifyPropertyChanged
{
    //INotifyPropertyChaned implementation
    //////////////////////////////////////
    private string stringValue;

    public string StringValue
    {
        get { return stringValue; }
        set
        {
            if (value.Length > 6)
            {
                //The below line throws unhandled exception error??
                throw new ValidationException(String.Format("Value's length is greater than {0}.", value.Length));
            }
            stringValue = value;
            this.OnPropertyChanged("StringValue");
        }
    }
}


我的XAML是

<StackPanel x:Name="LayoutRoot" Background="White">
<TextBox x:Name="radMaskedTextInput1"
                                Width="200"
                                Margin="10"
                                Text="{Binding Path=StringValue, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>

最佳答案

我运行了您的代码,并且在调试器下执行时,是的,VS调试器在抛出时停止,因为没有可处理该异常的catch语句。

但是,如果在未调试的情况下启动应用程序,则它们不会崩溃-编辑框边框变为红色。

如果要摆脱异常,则可以更改ViewModel以实现IDataErrorInfo接口,而不是引发异常。

如果异常干扰了调试,则可以例如引发从ArgumentException或ValidationException派生的自定义异常,并且将VS配置为在抛出此自定义异常且用户未处理时不中断

09-25 16:05