【问题标题】:Implementing IDataErrorInfo in a view model在视图模型中实现 IDataErrorInfo
【发布时间】:2012-10-28 22:44:00
【问题描述】:

我有一个带有 Phone 对象作为其属性之一的 ViewModel 类,我的主窗口数据上下文设置为 ViewModel,我是否需要在底层 Phone 模型类或包含 Phone 属性的 ViewModel 类上实现 IDataErrorInfo ?

另外,将我要验证的文本框绑定到我的 ViewModel.NewPhone.StringProperty 的正确方法是什么?

非常感谢

【问题讨论】:

    标签: c# wpf validation mvvm idataerrorinfo


    【解决方案1】:

    在哪里实现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];
        }
    }
    

    我建议让模型实现与每部手机相关的基本验证,例如电话号码格式,并让视图模型实现可能因视图而异的视图特定验证,例如仅允许美国电话号码或属于某个提供商的号码。

    【讨论】:

    • 很好的解释,尤其是使用了一个易于理解和具体的使用示例。谢谢。
    • 我一直在寻找一个展示如何对视图和视图模型进行验证的示例。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 2014-05-27
    相关资源
    最近更新 更多