Сообщения об ошибках валидации в silverlight MVVM - PullRequest
1 голос
/ 11 февраля 2011

Я пытаюсь реализовать метод проверки данных на примере Джоша Смита: Использование модели представления для обеспечения значимой проверки ...

Мой код очень похож на пример, за исключением небольшого различия, а именно, я использую инструментарий MVVM-Light, а мой класс модели - это частичный класс, который происходит из бэкэнда WCF.

Вот пример кода, о котором идет речь:

Во-первых, это автоматически сгенерированная версия класса из WCF:

public partial class Person : BaseObject
{
    private string FooField;
    public string Foo {
        get {
                return this.FooField;
            }
        set {
                if ((object.ReferenceEquals(this.FooField, value) != true)) {
                    this.FooField = value;
                    this.RaisePropertyChanged("Foo");
                }
            }
}

Затем я расширяю частичный класс для реализации IDataErrorInfo:

public partial class Person : IDataErrorInfo
{

    public string Error
    {
        get { return null;}
    }

    public string this[string propertyName]
    {
        if (propertyName == "Foo")
        {
            //Do some backend Validation
        }
    }
}

И, наконец, у меня есть модель просмотра:

public class PersonViewModel : INotifyProperyChanged, IDataErrorInfo
{
    private string _fooString;
    private Person _person;

    ...

    public string Foo {
        get { return _fooString; }
        set 
        {
            if (value == _fooString;)
                return;

            _fooString = value;

            RaisePropertyChanged("Foo");
        }

    public string this[string propertyName]
    {
        if (propertyName == "Foo")
        {
            string msg = Validate(Foo);  //Frontend Validation, range, format, etc.
            if(msg ! = null)
                return msg;

            _person.Foo = Foo;

        }
    }
}

Поэтому, когда я связываюсь со свойством в модели представления, код проверки, определенный в индексаторе IDataErrorInfo, выполняется в модели представления и в моем текстовом поле или в любом другом случае, если моя проверка завершается неудачно, как и ожидалось. Однако в моем коде индексатор на стороне МОДЕЛИ никогда не выполняется вообще. Я могу честно сказать, что я не вижу или не понимаю механизм, который должен вызывать его. Я выполнил пример кода из примера Джоша Смита, и он работает, вызывая MV this [], а затем, если проверка проходит хиты Model [this], для дополнительной проверки, но я на всю жизнь не могу понять, как это случается.

Я действительно надеюсь, что это что-то простое, что я пропускаю. Спасибо за просмотр.

1 Ответ

1 голос
/ 11 февраля 2011

Вы пропали без вести

return _person[propertyName];

из индексатора в ViewModel.

...