我正在尝试使用IDataErrorInfo在WPF + MVVM中进行验证。我按照MSDN的文章介绍了如何实现它。问题是我如何处理VM上的传递属性?
例如,
public class A : INotifyPropertyChanged, IDataErrorInfo
{
protected string _Name;
public string Name
{
get
{
return _Name;
}
set
{
_Name = value;
OnPropertyChanged("Name");
}
}
public string this[string propertyName]
{
get
{
string result = null;
if (propertyName == "Name")
{
if (Name == "ABC")
{
result = "Name cannot be ABC";
}
}
return result;
}
}
}
public class ViewModel : INotifyPropertyChanged
{
A a = new A();
public string ModelName
{
get
{
return a.Name;
}
set
{
a.Name = value;
OnNameChanged();
OnPropertyChanged("ModelName");
}
}
}
<TextBox Name="txtName" Text="{Binding Path=ModelName, ValidatesOnDataErrors=True}" />
我在视图模型上需要做什么才能在视图模型上再次重新验证Name属性?
由于
答案 0 :(得分:0)
您需要的是通过ViewModel公开您的整个A类。
这篇博文(不完美但是)显示了一种简单的方法:http://www.eidias.com/Blog/2012/7/2/simple-validation-in-wpf-mvvm-using-idataerrorinfo
此外,您还有一个关于如何在此主题上显示错误的有趣讨论:MVVM pattern, IDataErrorInfo and Binding to display error?
答案 1 :(得分:0)
验证发生在具有绑定集的类上。在你的情况下,它是ViewModel
。如果您必须通过属性,那么只需在IDataErrorInfo
上实施ViewModel
并通过
//视图模型
public string this[string propertyName]
{
get
{
if (propertyName == "ModelName")
{
return a["Name"];
}
return null;
}
}
我不知道在您的情况下IDataErrorInfo
上没有ViewModel
的方法