Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何强制WPF重新验证控件?_Wpf_Idataerrorinfo - Fatal编程技术网

如何强制WPF重新验证控件?

如何强制WPF重新验证控件?,wpf,idataerrorinfo,Wpf,Idataerrorinfo,我有一个带有业务规则的屏幕,它根据业务数据显示一些字段,而不显示其他字段。然后我使用可见性来显示/隐藏它们 我的业务对象实现IDataErrorInfo 我遇到的问题是,一些验证仅在显示字段时才适用 在此代码提取中,第一个IF仅在类型为INTERNAL时进行验证 string ValidateMinimumAmount() { if (this.type_account != "INTERNAL") return null; if (this.account_m

我有一个带有业务规则的屏幕,它根据业务数据显示一些字段,而不显示其他字段。然后我使用可见性来显示/隐藏它们

我的业务对象实现IDataErrorInfo

我遇到的问题是,一些验证仅在显示字段时才适用

在此代码提取中,第一个IF仅在类型为INTERNAL时进行验证

string ValidateMinimumAmount()
{

    if (this.type_account != "INTERNAL")
       return null;

    if (this.account_minimum==null)
    {
        return "You must provide a minimum amount";
    }
    return null;
}
我的问题是,由于我的BO的初始状态不是“内部”,因此即使在用户选择“内部”后,验证也不会再次发生

我如何“强制”验证在第一次之后发生。
当然,我已经检查过,如果初始状态为“Internal”,那么它就可以工作了。我建议您通过添加错误属性来更“正确”地通知错误

这是一篇非常容易理解的文章,它帮助了我,当我作为一个完全的初学者开始在WPF中工作时,你应该看看以下内容:

你说当你玩“隐藏和显示”时,你的“验证”消失了?但您的IDataErrorInfo实现集对象在再次显示后仍然无效

那么它似乎只是一个ValidationErrorTemplate装饰程序问题。我不知道您的xaml是什么样子,但是用控件包围您的容器,以便使用AdorneDecorator进行验证

<AdornerDecorator>
  <Yourcontainer with your Controls inside/>
</AdornerDecorator>


如果这个技巧不能解决您的问题,请发布xaml绑定和idataerrorinfo实现。

您的问题有点令人困惑。希望这个答案会有所帮助

在您的示例中,如果帐户类型是内部的,您希望最低金额是必需的。这意味着
MinimumAmount
属性的验证状态取决于
AccountType
的值。因此,只要
AccountType
发生更改,您就必须验证
MinimumAmount
。因此:

public string AccountType
{
   get { return _AccountType; }
   set
   {
      if (_AccountType != value)
      {
         _AccountType = value;
         OnPropertyChanged("AccountType");
         ValidateMinimumAmount();
      }
   }
}

如果属性之间有很多相互依赖关系,那么有时候最简单的方法就是为整个对象实现一个
Validate()
方法,并在任何属性更改时调用它。不要因为在任何时候属性更改时重新验证整个对象都是低效的想法而挂断。查看模型属性通常只会根据用户输入进行更改,除非您的
Validate()
方法需要大量时间才能运行,否则它成为问题的可能性很小。

您基本上是告诉我摆脱IDataErrorInfo?不,您应该实际使用它,正如我告诉您的,这篇文章介绍了一种简单的方法来实现它,其中字符串属性是持续更新的。我在文章中没有看到持续更新的字符串。你能指给我看吗?最后一部分,叫做“IDataErrorInfo”。声明如下的字符串:public string每次要检查错误字符串时,都会刷新此[string propertyName]。是否可以发布XAML?