wpf中的数据验证

时间:2011-06-21 14:13:44

标签: c# wpf validation

在我的代码中我是这样的:

class Data
{
    private int valore;
    public int Valore
    {
        get 
        {
            return valore;
        }
        set
        {
            if (value > 10 || value < 0)
            {
                throw new ArgumentException("Insert a value between 0 and 10");
            }                    
            valore = value;                
        }
    }
}

然后我:

Data dati = new Data { Valore = 6 };

    public MainWindow()
    {
        InitializeComponent();                      

        this.DataContext = dati;
    }

在XAML中我已经:

<TextBox Height="23" Width="120" Text="{Binding Path=Valore, Mode=TwoWay, ValidatesOnExceptions=True}"

问题是当我插入一个大于10的值时,我看不到TextBox周围的红色边框,而是我的应用程序抛出一个未处理的异常。

5 个答案:

答案 0 :(得分:1)

MSDN WPF Validation

你这样做不正确,你的程序从未处理的异常崩溃的原因是你正在抛出和未处理的异常。

答案 1 :(得分:1)

对于DataValidatation,您需要执行以下操作:

  1. 在数据类中实现System.ComponentModel.IDataErrorInfo

  2. 您需要将ValidationRule添加到Binding

答案 2 :(得分:0)

调试器似乎忽略了这里生成的异常实际上被绑定引擎捕获的事实。当您在Visual Studio外部启动程序时,您应该获得所需的行为。

为避免调试器中断验证,您可以使用

public int Valore
{
    get { //... }
    [System.Diagnostics.DebuggerStepThrough()]
    set { //... }
}

或者,更好的是,不要使用异常进行数据验证,而是查看IDataErrorInfo interface。毕竟,无效的用户输入并不是例外,而是常态。 =)

答案 3 :(得分:0)

在文本绑定绑定

上使用ValidationRules属性
 <TextBox>
<TextBox.Text>
    <Binding Path=Valore, Mode=TwoWay>
        <Binding.ValidationRules>
            <ExceptionValidationRule />
        </Binding.ValidationRules>
    </Binding>
</TextBox.Text>

如果输入错误的值,文本框边框将变为红色

答案 4 :(得分:0)

有许多方法可以执行验证。如果您正在使用MVVM,则可能需要IDataErrorInfo

我会将其与FluentValidation配对以简化操作。