我在使用这个界面时遇到了一些问题。在我的课堂上,“研究员”是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}" /> `但是这没有检查任何东西,而且我仍然可以在TextBox中输入我想要的任何日期。有什么问题吗?
发布于 2016-04-04 14:01:06
我建议把它改为类似的东西
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();
}
}`因为这允许您返回有意义的错误并分别检查每个属性。
此外,您还需要触发属性更改事件,以便更改为
public DateTime Date
{
get { return date; }
set
{
date = value;
PropertyChanged(this, new PropertyChangedArg("Date");
}
} 也需要
https://stackoverflow.com/questions/36404177
复制相似问题