【发布时间】:2016-04-04 13:33:00
【问题描述】:
我在使用这个界面时遇到了一些问题。在我的类“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}" /> `
但这并没有检查任何东西,我仍然可以在文本框中输入我想要的任何日期。有什么问题?
【问题讨论】:
-
难道 (this.Date.Year 1990) 总是假的?年份不能同时小于 1930 和大于 1990...我认为您可能希望 && (and) 成为 || (或)?
-
我不确定您实际上想要实现什么。但是如果问题是文本框中的文本没有更新,尝试调用
PropertyChanged(this, new PropertyChangedEventArgs("Date");否则,UI永远不会知道变量已经改变了。 -
我同意@J.H.看起来像你的意思|||不是 &&,但是您应该使用属性参数来选择验证规则并单独验证每个属性
-
this.projjects.Count < 0似乎也不太可能是真的。 -
你的单个类真的实现了6个不相关的接口吗?
标签: c# wpf validation xaml textbox