我在使用此接口时遇到了一些问题。在我的课“研究员”,这是一个实现IDataErrorInfo的,我写这样的东西:实现IDataErrorInfo接口
[Serializable]
public class Researcher : Person, IDeepCopy, IEnumerable, IComparable, IComparer, IDataErrorInfo, INotifyPropertyChanged
{
public DateTime Date
{
get
{
return date;
}
set
{
date = value;
}
}
//...
public string Error { get { return "Error Text"; } }
public string this[string property]
{
get
{
string msg = null;
if ((this.Date.Year < 1930 && this.Date.Year > 1990) && (this.projjects.Count < 0))
msg = "Not Correct Date";
return msg;
}
}
//...
}
在我的XAML代码:
<TextBox Name="birthday"
Grid.Row="2"
Grid.Column="1"
Text="{Binding Date,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True}" /> `
但这不检查任何东西,我仍然可以在文本框中输入我想要的任何日期。问题是什么?
难道是(this.Date.Year <1930 && this.Date.Year> 1990)总是假?年份不能小于1930年,也不能大于1990年......我认为你可能希望&&(和)是|| (要么)? –
我不确定你实际上想要达到什么目的。但如果问题在于文本框中的文本没有更新,请尝试调用PropertyChanged(this,new PropertyChangedEventArgs(“Date”);否则,UI永远不会知道该变量已更改 –
我同意@ JH看起来像你的意思|||不是&&,但是你应该使用属性参数来选择验证规则并单独验证每个属性 – MikeT