实现 IDataErrorInfo 接口
Implementing IDataErrorInfo interface
我在使用这个界面时遇到了一些问题。在我的 class "Researcher" 中,它是 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}" /> `
但这不会检查任何内容,我仍然可以在文本框中输入任何我想要的日期。有什么问题?
我建议将其更改为与此类似的内容
public string Error { get { return string.Empty; } }
public string this[string property]
{
get
{
var msg = new StringBuilder();
switch(property)
{
case "Date":
if(Date <1930) msg.AppendLine("Date must be greater than 1930");
if(Date >1990) msg.AppendLine("Date must be less than 1990");
break;
case "projjects":
if(projjects.Count <= 0) msg.AppendLine("projjects must contain atleast 1 item");
break;
}
return msg.ToString();
}
}`
因为这允许您 return 有意义的错误并分别检查每个 属性
您还需要触发 属性 更改事件
所以改为
public DateTime Date
{
get { return date; }
set
{
date = value;
PropertyChanged(this, new PropertyChangedArg("Date");
}
}
也需要
我在使用这个界面时遇到了一些问题。在我的 class "Researcher" 中,它是 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}" /> `
但这不会检查任何内容,我仍然可以在文本框中输入任何我想要的日期。有什么问题?
我建议将其更改为与此类似的内容
public string Error { get { return string.Empty; } }
public string this[string property]
{
get
{
var msg = new StringBuilder();
switch(property)
{
case "Date":
if(Date <1930) msg.AppendLine("Date must be greater than 1930");
if(Date >1990) msg.AppendLine("Date must be less than 1990");
break;
case "projjects":
if(projjects.Count <= 0) msg.AppendLine("projjects must contain atleast 1 item");
break;
}
return msg.ToString();
}
}`
因为这允许您 return 有意义的错误并分别检查每个 属性
您还需要触发 属性 更改事件 所以改为
public DateTime Date
{
get { return date; }
set
{
date = value;
PropertyChanged(this, new PropertyChangedArg("Date");
}
}
也需要