首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF验证和IDataErrorInfo

WPF验证和IDataErrorInfo
EN

Stack Overflow用户
提问于 2010-03-22 20:22:16
回答 6查看 6.7K关注 0票数 4

注意--我的类是EntityObject类!

我有以下类:

代码语言:javascript
复制
public class Foo
{
    public Bar Bar { get; set; }
}

public class Bar : IDataErrorInfo
{
    public string Name { get; set; }

    #region IDataErrorInfo Members
    string IDataErrorInfo.Error
    {
        get { return null; }
    }

    string IDataErrorInfo.this[string columnName]
    {
        get
        {
            if (columnName == "Name")
            {
                return "Hello error!";
            }
            Console.WriteLine("Validate: " + columnName);
            return null;
        }
    }
    #endregion
}

XAML如下所示:

代码语言:javascript
复制
<StackPanel Orientation="Horizontal" DataContext="{Binding Foo.Bar}">
     <TextBox Text="{Binding Path=Name, ValidatesOnDataErrors=true}"/>
</StackPanel>

我在验证中放了一个断点和一个Console.Writeline -我没有中断点。不执行验证。有人能把我压在我的错误所在的地方吗?

EN

回答 6

Stack Overflow用户

发布于 2011-07-18 19:35:45

这可能是一个愚蠢的答案,但在默认情况下,当LostFocus发生时,绑定将调用设置器。如果您还没有这样做,请尝试这样做。

如果希望在每次按键时都触发错误代码,请在绑定中使用UpdateSourceTrigger=PropertyChanged

票数 2
EN

Stack Overflow用户

发布于 2010-03-22 23:31:11

你忘了在“Bar”类上实现INotifyPropertyChanged,那么只有绑定系统才会触发setter。

所以你的“Name”属性最有可能是。

代码语言:javascript
复制
public string Name 
    { 
          get{ return _name; } 
      set
      {
          _name = value;
          RaisePropertyChanged("Name"); // Or the call might OnPropertyChanged("Name");
      }
    }
票数 1
EN

Stack Overflow用户

发布于 2011-01-05 03:16:54

我不熟悉EntityObject类,在.NET框架文档或快速的谷歌搜索中也找不到它。

不管怎样,你需要做的就是让我们也使用NotifyOnValidationError

代码语言:javascript
复制
<TextBox Text="{Binding Path=Name, ValidatesOnDataErrors=true, NotifyOnValidationError=true}"/>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2492122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档