我有一个WPF
应用程序(.Net 3.5
),它使用ViewModel上的IDataErrorInfo
来验证输入。
效果很好,用户控件获得了正确的UI反馈。
问题在于用户仍然可以更改所选元素,或保存该元素。
所以我的问题是:我怎么知道我所有的属性都是有效的?或至少我所有显示的值均有效。目标是在此结果上绑定(bind)一些IsActive
最佳答案
根据您对 IDataErrorInfo
实现的评论,将您的实现更改为这种风格....
#region IDataErrorInfo Members
public string Error
{
get { return this[null] }
}
public string this[string columnName]
{
get
{
StringBuilder result = new StringBuilder();
if (string.IsNullOrEmpty(columnName) || columnName == "FirstName")
{
if (string.IsNullOrEmpty(FirstName))
result.Append("Please enter a First Name\n");
}
if (string.IsNullOrEmpty(columnName) || columnName == "LastName")
{
if (string.IsNullOrEmpty(LastName))
result.Append("Please enter a Last Name\n");
}
if (string.IsNullOrEmpty(columnName) || columnName == "Age")
{
if (Age < = 0 || Age >= 99)
result.Append("Please enter a valid age\n");
}
return (result.Length==0) ? null : result.Remove(result.Length-1,1).ToString();
}
}
#endregion
public bool IsValid {
get { return string.IsNullOrEmpty(this.Error); }
}
然后在你的属性(property)改变事件中
if (e.PropertyName == "Error") {
OnPropertyChanged(this,new PropertyChangedEventArgs("IsValid"));
}
if (e.PropertyName != "Error" && e.PropertyName != "IsValid") {
OnPropertyChanged(this,new PropertyChangedEventArgs("Error"));
}