繁体   English   中英

如何阻止验证触发器在wpf中自动启动

[英]How to stop the validation trigger to start automatically in wpf

我在ViewModel中进行了数据验证。 当我加载View ,检查验证而不更改TextBox的内容,这意味着通过加载视图将错误样式设置为TextBox

这是代码:

XAML

<TextBox {...} Text="{Binding Path=ProductName,
               UpdateSourceTrigger=PropertyChanged, 
               ValidatesOnDataErrors=True}"/>

ViewModel ,使用数据注释进行验证:

Code

private string _productName;

[Required(AllowEmptyStrings = false, ErrorMessage = "The Product Name can't be null or empty.")]
[StringLength(50, ErrorMessage = "The Product Name can't be longer than 50.")]
[Uniqueness(Entities.Product, ErrorMessage = "A Product with that Name already exists ")]
public string ProductName
{
    get { return _productName; }
    set
    {
        _productName = value;
        SaveProduct.OnCanExecuteChanged();
        OnPropertyChanged("ProductName");
    }
}

如何加载视图时如何停止验证触发?

在插入数据之前,我不希望TextBox显示错误。

每当为属性引发PropertyChanged事件时,都将检查验证。

我怀疑你是在构造函数中设置属性 而是在加载时,考虑设置属性的备份字段而不是实际属性。

_productName = "TestName";

即使我有同样的问题。 通过使用一个简单的技巧修复它。 我定义了一个私有布尔值

private bool _firstLoad;

在构造函数中,我将_firstLoad设置为true。 在数据验证期间,如果_firstLoad为true,则返回String.Empty 在设置Property ProductName

public string ProductName
  {
    get { return _productName; }
    set
      {
        _productName = value;
        _firstLoad = false;
        SaveProduct.OnCanExecuteChanged();
        OnPropertyChanged("ProductName");
      }
 }

我将_firstLoad设置为false。 所以现在当PropertyChanged事件触发验证时,验证将按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM