当前位置:  开发笔记 > 编程语言 > 正文

WPF验证不会在TextBox的第一个LostFocus上触发

如何解决《WPF验证不会在TextBox的第一个LostFocus上触发》经验,为你挑选了3个好方法。

我试图针对一个对象验证WPF表单.当我在文本框中键入内容时,验证会激活,失去焦点会回到文本框,然后删除我写的任何内容.但是,如果我只是从文本框中加载WPF应用程序和选项卡而不从文本框中写入和删除任何内容,那么它就不会被触发.

这是Customer.cs类:

public class Customer : IDataErrorInfo
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }

        public string Error
        {
            get { throw new NotImplementedException(); }
        }
        public string this[string columnName]
        {
            get
            {
                string result = null;

                if (columnName.Equals("FirstName"))
                {
                    if (String.IsNullOrEmpty(FirstName))
                    {
                        result = "FirstName cannot be null or empty"; 
                    }
                }
                else if (columnName.Equals("LastName"))
                {
                    if (String.IsNullOrEmpty(LastName))
                    {
                        result = "LastName cannot be null or empty"; 
                    }
                }
                return result;
            }
        }
    }

这是WPF代码:

LastName

             

Bermo.. 18

如果你不想在你的代码中添加一些逻辑,你可以用这样的方式处理实际的LostFocus事件:

的.xaml




.xaml.cs

private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
     ((Control)sender).GetBindingExpression(TextBox.TextProperty).UpdateSource();
}


小智.. 8

不幸的是,这是设计上的.仅当控件中的值发生更改时,才会触发WPF验证.

难以置信,但却是如此.到目前为止,WPF验证是一个很大的谚语 - 它很可怕.

但是,您可以做的一件事是从控件的属性中获取绑定表达式并手动调用验证.它很糟糕,但它确实有效.



1> Bermo..:

如果你不想在你的代码中添加一些逻辑,你可以用这样的方式处理实际的LostFocus事件:

的.xaml




.xaml.cs

private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
     ((Control)sender).GetBindingExpression(TextBox.TextProperty).UpdateSource();
}



2> 小智..:

不幸的是,这是设计上的.仅当控件中的值发生更改时,才会触发WPF验证.

难以置信,但却是如此.到目前为止,WPF验证是一个很大的谚语 - 它很可怕.

但是,您可以做的一件事是从控件的属性中获取绑定表达式并手动调用验证.它很糟糕,但它确实有效.



3> w4g3n3r..:

看一下ValidationRule 的ValidatesOnTargetUpdated属性.它将验证何时首次加载数据.如果您尝试捕获空字段或空字段,这很好.

你会像这样更新你的绑定元素:


    
        
    

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有