1

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

我的业务对象实现了 IDataErrorInfo。

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

在此代码摘录中,第一个 IF 仅在 type_account 为 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 的初始状态不是“内部”,那么即使在用户选择“内部”之后,验证也不会再次发生。

我如何“强制”在第一次之后进行验证。当然我已经检查过如果初始状态是“内部”那么它可以工作

4

3 回答 3

1

你说当你玩捉迷藏时你的“验证”消失了?但是您的带有 IDataErrorInfo 实现的对象在再次显示后仍然无效?

那么它似乎只是一个 ValidationErrorTemplate Adorner 问题。我不知道你的 xaml 是什么样子,但是用你的控件包围你的容器以使用 AdornerDecorator 进行验证

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

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

于 2011-03-24T09:35:57.933 回答
1

我建议您通过添加错误属性来更“正确地”通知错误。

这是一篇非常容易理解的文章,对我有帮助,当我刚开始作为一个完整的初学者在 WPF 中工作时,你应该看看这个:

http://www.codeproject.com/KB/WPF/wpfvalidation.aspx

于 2011-03-24T08:48:53.820 回答
0

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

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

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

如果属性之间有很多相互依赖关系,有时最简单的Validate()方法是为整个对象实现一个方法,并在任何属性更改时调用它。不要因为任何时候属性更改重新验证整个对象效率低下的想法而挂断电话。视图模型属性通常仅响应用户输入而更改,除非您的Validate()方法需要大量时间来运行,否则它成为问题的可能性非常小。

于 2011-03-24T16:23:54.663 回答