繁体   English   中英

在视图模型中实现IDataErrorInfo

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM