未输入任何内容时如何抑制验证 [英] How to suppress validation when nothing is entered
问题描述
我将 WPF 数据绑定与实现 IDataErrorInfo 接口的实体一起使用.一般来说,我的代码如下所示:
I use WPF data binding with entities that implement IDataErrorInfo interface. In general my code looks like this:
商业实体:
public class Person : IDataErrorInfo
{
public string Name { get; set;}
string IDataErrorInfo.this[string columnName]
{
if (columnName=="Name" && string.IsNullOrEmpty(Name))
return "Name is not entered";
return string.Empty;
}
}
Xaml 文件:
<TextBox Text="{Binding Path=Name, Mode=TwoWay, ValidatesOnDataErrors=true}" />
当用户点击创建新人"时,执行以下代码:
When user clicks on "Create new person" following code is executed:
DataContext = new Person();
问题是当person刚创建时它的名字是空的,WPF立即画红框并显示错误信息.我希望它仅在名称已被编辑且焦点丢失时才显示错误.有人知道这样做的方法吗?
The problem is that when person is just created its name is empty and WPF immediately draws red frame and shows error message. I want it to show error only when name was already edited and focus is lost. Does anybody know the way to do this?
推荐答案
只有在 Name 属性发生更改时,您才能更改您的 person 类以触发验证错误:
You can change your person class to fire validation error only if Name property was ever changed:
public class Person : IDataErrorInfo {
private bool nameChanged = false;
private string name;
public string Name {
get { return name; }
set {
name = value;
nameChanged = true;
}
}
//... skipped some code
string IDataErrorInfo.this[string columnName] {
get {
if(nameChanged && columnName == "Name" && string.IsNullOrEmpty(Name))
return "Name is not entered";
return string.Empty;
}
}
}
这篇关于未输入任何内容时如何抑制验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!