【问题标题】:IDataErrorInfo doesn't workIDataErrorInfo 不起作用
【发布时间】:2013-11-27 19:01:03
【问题描述】:

我想让文本框的边框变成红色,并且在它下面的另一个文本框告诉错误。

C#

 class BandsVM : ObservableObject, IPage, IDataErrorInfo
    {

        [Required(ErrorMessage = "De naam is verplicht")]
        [RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$", ErrorMessage = "Er zijn geen speciale tekens toegelaten")]
        [StringLength(50, MinimumLength = 1, ErrorMessage = "De naam moet tussen de 1 en 50 karakters bevatten ")]
        private string insertName;
        public string InsertName
        {
            get { return insertName;  }
            set { insertName = value; }
        }

XAML:

<TextBox Validation.ErrorTemplate="{StaticResource ErrorTemplate}" Text="{Binding InsertName, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource TextboxError}"/>

【问题讨论】:

    标签: c# xaml textbox idataerrorinfo


    【解决方案1】:

    由于您是从 ObservableObject 继承的,我假设它实现了 INotifyPropertyChanged

    属性 InsertName 应调用 PropertyChanged 事件处理程序,以通知 wpf 绑定引擎评估属性更改。然后这将调用您的 this[] 索引,IDataErrorInfo 使用它来评估验证错误。

    将您的属性更改为:

    public string InsertName
    {
        get { return insertName;  }
        set { 
            if (value != insertname)
            {
                insertName = value; 
            }
    
            OnPropertyChanged(() => InsertName);
            // or OnPropertyChanged("InsertName");
        }
    }
    

    【讨论】:

    • 您好 MIchael,感谢您的回复,但它不起作用。
    • 您是否尝试在属性的 set 访问器上设置断点,以确保绑定实际上正确发生?您是否在输出窗口中收到任何错误?
    • 很奇怪,它通过了 if well。但仍然没有应用样式。
    • 我会尝试暂时删除 Validation.ErrorTemplate 和 Style ,只是为了验证默认验证模板是否有效。如果出现默认红色边框,则发布验证模板和文本框样式的相关 xaml。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 2020-02-18
    • 2011-01-07
    相关资源
    最近更新 更多