Mic*_*per 5 c# validation wpf mvvm idataerrorinfo
我有一个ViewModel类,Phone对象作为其属性之一,我的主窗口数据上下文设置为ViewModel,我是否需要在底层Phone模型类或包含Phone属性的ViewModel类上实现IDataErrorInfo?
另外,将我正在尝试验证的文本框绑定到我的ViewModel.NewPhone.StringProperty的正确方法是什么?
非常感谢
实现位置的决定IDataErrorInfo
实际上取决于应用程序的逻辑.例如,您可以让您的Phone
课程以不允许任何无效电话号码的方式实施,但在您的viewmodel中,您只想允许来自美国的号码.
通常一个好的做法是IDataErrorInfo
在模型和视图模型中实现,如果viewmodel没有发现错误,请将请求转发给模型.然后你会像往常一样绑定到viewmodel.
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];
}
}
Run Code Online (Sandbox Code Playgroud)
我建议让模型实现与每个电话相关的基本验证,例如电话号码格式,并让viewmodel实现视图特定的验证,这些验证可能因视图而异,例如仅允许美国电话号码或属于某个提供者.