WPF MVVM验证VM上的直通属性

时间:2013-04-03 20:59:41

标签: wpf validation mvvm

我正在尝试使用IDataErrorInfo在WPF + MVVM中进行验证。我按照MSDN的文章介绍了如何实现它。问题是我如何处理VM上的传递属性?

例如,

public class A : INotifyPropertyChanged, IDataErrorInfo
{
    protected string _Name;
    public string Name
    {
        get
        {
            return _Name;
        }
        set
        {
            _Name = value;
            OnPropertyChanged("Name");
        }
    }

    public string this[string propertyName]
    {
        get
        {
            string result = null;

            if (propertyName == "Name")
            {
                if (Name == "ABC")
                {
                    result = "Name cannot be ABC";
                }
            }

            return result;
        }
    }
}

public class ViewModel : INotifyPropertyChanged
{
    A a = new A();

    public string ModelName
    {
        get
        {
            return a.Name;
        }
        set
        {
            a.Name = value;
            OnNameChanged();
            OnPropertyChanged("ModelName");
        }
    }
}    

<TextBox Name="txtName" Text="{Binding Path=ModelName, ValidatesOnDataErrors=True}" />

我在视图模型上需要做什么才能在视图模型上再次重新验证Name属性?

由于

2 个答案:

答案 0 :(得分:0)

您需要的是通过ViewModel公开您的整个A类。

这篇博文(不完美但是)显示了一种简单的方法:http://www.eidias.com/Blog/2012/7/2/simple-validation-in-wpf-mvvm-using-idataerrorinfo

此外,您还有一个关于如何在此主题上显示错误的有趣讨论:MVVM pattern, IDataErrorInfo and Binding to display error?

答案 1 :(得分:0)

验证发生在具有绑定集的类上。在你的情况下,它是ViewModel。如果您必须通过属性,那么只需在IDataErrorInfo上实施ViewModel并通过

//视图模型

public string this[string propertyName]
{
    get
    {
        if (propertyName == "ModelName")
        {
            return a["Name"];
        }

        return null;
    }
}

我不知道在您的情况下IDataErrorInfo上没有ViewModel的方法