WPF验证错误



在我当前的项目中,我必须处理WPF表单中的数据验证。我的表单是在一个数据模板在一个资源字典。由于两个按钮(通过两个DelegateCommand)序列化和反序列化数据,我可以保存和加载表单中的数据。

如果我的表单的一个字段是空的或无效的,保存按钮被禁用。由于UpdateSourceTrigger属性,每次更改时都会检查字段。这就是为什么我需要知道在我的c#代码中,如果一个字段是无效的更新我的保存命令。

目前,我在我的XAML绑定中使用ExceptionValidationRule,我想知道这是否是一个好的实践。我不能实现ValidationRule,因为我需要在c#代码中知道字段是否无效,以更新保存命令(启用或禁用保存按钮)。

<TextBox>
    <Binding Path="Contact.FirstName" UpdateSourceTrigger="PropertyChanged">
        <Binding.ValidationRules>
            <ExceptionValidationRule/>
        </Binding.ValidationRules>
    </Binding>
</TextBox>

在这个博客中,我们可以阅读:

在setter中引发异常不是一个很好的方法,因为这些属性也是由代码设置的,有时可以暂时将它们保留错误值。

我已经读了这篇文章,但我不能使用它,我的文本框是在一个DataTemplate,我不能在我的c#代码中使用它们。

所以,我想知道我是否应该改变我的数据验证和不使用ExceptionValidationRule。

谢谢你,blindmeis,你的主意很好。IDataErrorInfo似乎比ExceptionValidationException更好,它工作。

下面是一个与我的项目相匹配的例子:IDataErrorInfo示例

它不使用DelegateCommand,但很简单,可以修改。你的模型必须实现IDataErrorInfo:

public class Contact : IDataErrorInfo
{
    public string Error
    {
        get { throw new NotImplementedException(); }
    }
    public string Name { get; set; }
    public string this[string property]
    {
        get 
        {
            string result = null;
            if (property== "Name")
            {
                if (string.IsNullOrEmpty(Name) || Name.Length < 3)
                    result = "Please enter a Name";
            }
            return result;
        }
    }
}
在XAML代码中,不要忘记更改Binding:
<TextBox>
    <Binding Path="Contact.Name" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True" NotifyOnValidationError="True"/>
</TextBox>

相关内容

  • 没有找到相关文章

最新更新