我在使用此接口時遇到了一些問題。在我的課「研究員」,這是一個實現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