我有一个ViewModel类,其中一个属性是Phone对象,我的主窗口数据上下文设置为ViewModel,我需要在底层的Phone模型类或包含Phone属性的ViewModel类上实现IDataErrorInfo吗?
此外,将要验证的文本框绑定到我的ViewModel.NewPhone.StringProperty的正确方法是什么?
非常感谢。
此外,将要验证的文本框绑定到我的ViewModel.NewPhone.StringProperty的正确方法是什么?
非常感谢。
IDataErrorInfo
接口的位置取决于应用程序的逻辑。例如,您可以让您的 Phone
类以不允许任何无效电话号码的方式实现它,但在您的视图模型中,您只想允许来自美国的号码。IDataErrorInfo
接口,并且如果视图模型没有发现错误,则将请求转发到模型。然后您将像往常一样绑定到视图模型。public string this[string propertyName]
{
get
{
if (propertyName == "PhoneNumber")
{
if (!IsUSNumber(PhoneNumber))
{
return "Non-US number.";
}
}
// No validation errors found by the viewmodel
// Forward to model's IDataErrorInfo implementation
return Model[propertyName];
}
}
我建议将基本验证(如电话号码格式)放在模型中实现,这对于所有电话都是相关的。而将视图特定的验证(如仅允许美国电话号码或属于某个特定提供商的号码)放在视图模型中实现。