[英]Implementing IDataErrorInfo in a view model
我有一个带有电话对象作为其属性之一的ViewModel类,我的主窗口数据上下文设置为ViewModel,我是否需要在基础的Phone模型类或包含Phone属性的ViewModel类上实现IDataErrorInfo?
另外,将要验证的文本框绑定到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];
}
}
我建议让模型实现与每个电话都相关的基本验证(例如电话号码格式),并让viewmodel实现特定于视图的验证,该验证可能因视图而异,例如仅允许使用美国电话号码或属于给某个提供商。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.