0

我正在尝试使用 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 属性?

谢谢

4

2 回答 2

0

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

//视图模型

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

        return null;
    }
}

我不知道在你的情况下没有IDataErrorInfoViewModel方法

于 2013-04-04T20:22:04.613 回答
0

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

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

此外,您还对如何显示此主题的错误进行了有趣的讨论:MVVM 模式、IDataErrorInfo 和绑定以显示错误?

于 2013-04-04T06:59:18.390 回答